ToolBar中menu無法同時顯示圖示和文字問題的解決方法 https://www.jb51.net/article/124726.htm
https://blog.csdn.net/shangming150/article/details/77914110
Toolbar添加傳回按鈕
https://www.jianshu.com/p/2b3785484d7f
ToolBar與ActionBar
https://www.jianshu.com/p/81d0bcb282cb
1.什麼是Activity
官方文檔是這麼說的:An <code>Activity</code> is an application component that provides a screen with which
users can interact in order to do something, such as dial the phone, take a photo, send an email, or
view a map. Each activity is given a window in which to draw its user interface. The window
typically fills the screen, but may be smaller than the screen and float on top of other
windows.
大緻意思是說:Activity是一個應用程式元件,給使用者提供一個螢幕讓使用者可以與之互動做一些事
情。
2.Activity的生命周期
下面這張圖是官方文檔提供的Activity的生命周期的圖:

·onCreate 方法 當Activity啟動的是調用
·onDestroy方法 當Activity銷毀的時候調用
·onStart 方法 當Activity可見的時候調用
·onStop 方法 當Activity
不可見的時候調用
·onResume 方法 當Activity上的按鈕 獲得焦點 可以被點選的時候調用
·onPause 方法 當Activity 上的按鈕 失去焦點 按鈕不可以被點選的時候調用
·onRestart 方法 當界面被重新加載的時候調用
注意這個方法
■手機按鍵對應的Activity生命周期的回調方法
如果點選BACK鍵,會調用Activity的onPause()、onStop()、onDestroy()方法,Activity
會登出掉。
如果點選HOME鍵,會調用Activity的onPause()、onStop()方法,但不會執行onDestroy() 方法,程式會運作在背景。如果應用程式沒有被系統殺死,那麼再點選應用程式圖示會調用Activity的onRestart()、onStart()、OnResume()方法。
■特殊的回調方法組合
如果打開第一個Activity之後,不關閉它,開啟另外一個Activity(非透明的),會調用第一個Activity的onPause()、onStop()方法。
如果打開第一個Activity之後,不關閉它,開啟另外一個Activity(透明的),會調用第一個
Activity的onPause()方法,而不會去調用onStop()方法,因為第一個Activity還是可見的。如果關
閉透明的Activity,第一個Activity隻會回調onResume()方法。
■切屏對應的Activity生命周期的回調方法
手機在切屏的時候,會先銷毀,再建立.走onPause()、onStop()、onDestroy()方法,再走onCreate
()、onStart()、onResume()方法。這一過程就相當于關閉并重新進入應用一樣,那麼如何防止手機
在切屏時生命周期發生改變呢?
第一種方式:把Activity頁面的朝向寫死,通過這個屬性
android:screenOrientation="portrait" portrait代表豎屏 landscape代表橫屏
朝向寫死,在手機上方向是不能改變的,但是在AVD上仍可以切屏,隻是生命周期沒有變化。
第二種方式:android:configChanges="orientation|keyboardHidden|screenSize"
3.Activity的清單配置
如果想讓Activity成為應用程式的入口,需要将activity的意圖過濾器配置如下:
Android允許程式有多個activity作為應用程式的入口,隻要activity配置了以上的意圖過濾器,就會在手機桌面上建立多個應用程式圖示,點選圖示會進入對應的activity界面。
如果activity節點沒有設定自己的label和icon,會預設使用application節點的label和icon。
4.Activity的頁面跳轉及資料傳遞
拓展:話說android Activity之間資料傳遞 http://blog.csdn.net/maylian7700/article/details/7323993
注意的問題,序列化的類中還有自定義的類,則這個類也要序列化,否則會出錯.
■啟動Activity傳資料和取資料
本Activity:傳資料,通過Intent對象的setData()和putExtra()方法封裝資料至Intent對象。
被調用的的Activity:取資料,通過Activity類的getIntent()方法先得到開啟這個Activity的
Intent對象,也就是本Activity裡傳資料用到的Intent對象,然後通過
Intent對象的getXxxExtra()方法得到資料。
■啟動Activity的2種方式
第一種:不需要被啟動的Activity傳回資料
第二種:需要被啟動的Activity傳回資料
對于第二種Activity的啟動方式,需要思考的兩個問題?
1)被調用的Activity怎麼傳回資料?
首先,調用者Activity啟動被調用的Activity的方式是
其次,在被調用的Activity裡面,建立Intent對象,将要傳回的資料封裝進Intent對
象,調用Activity類的setResult(int resultCode, Intent data)方法傳回Intent對象。
如:
2)調用者Activity怎麼擷取被調用的Activity所傳回的資料?
通過複寫Activity的onActivityResult方法可以得到其它的一個或多個Activity返
回的資料.
如:
上面的截圖是Android官方文檔的截圖,利用了雙重判斷确定是哪個對象傳回的資料,這樣顯
得更加嚴密. 傳回的資料就存儲在方法中的參數data中,調用Intent對象的方法取出即可.
5.應用1_短信大全
需求:将一些好的短信顯示到ListView上,點選某一條短信,就跳到手機的短信發送頁面,并把
ListView選中條目的内容添加到短信發送頁面的短信内容中.
分析:這個需求首先涉及到ListView的使用,然後跳到手機短信發送頁面,涉及到隐式意圖啟動系
統應用,并且要将本應用的資料傳遞到系統應用裡,涉及到頁面跳轉和資料傳遞.
效果圖:
假如我點選了ListView短信清單的第2條短信,然後就跳轉到短信發送頁面
核心代碼:
那麼問題來了,上面意圖對象的過濾條件及傳遞資料格式我是怎麼知道的呢?
1)先打開Logcat,然後打開手機短信發送頁面,會看到Locat上列印這樣一行資訊(如果沒有
列印任何資訊,先安裝一個自己的應用,然後重新打開系統的短信發送頁面。):
2)然後去系統應用源碼裡找到短信發送應用Sms,在清單檔案裡找到ComposeMessageActivity
的配置
短信發送頁面有很多的過濾器,都是用于發現不同格式資料的(用mimetype屬性來限制),
我們這裡就隻需要文本類型的資料,就選擇mimetype為text/plain的進行過濾了。
知道了意圖對象的過濾器,那麼就可以為意圖對象設定過濾資訊
3)但是,怎麼給intent傳遞資料呢?那麼就得看短信發送頁面的Activity是如何擷取調用
它的Intent的資料的?
通過在ComposeMessageActivity.java裡搜尋getStringExtra可以得到×××是根據
sms_body鍵名來擷取短信内容的。
是以Intent在putExtra時采用的鍵名是“sms_body”。
6.應用2_×××
需求:做一個如下圖所示的×××,布局采用混合線性布局。
功能1:在主UI界面中點選“添加聯系人”那個+号按鈕,就彈出一個窗體列出聯系人(是
模拟資料,學到内容提供者即可擷取手機真正的聯系人),選擇一個聯系人後關閉
選擇聯系人頁面,并将選擇的聯系人電話傳回顯示到主UI界面的文本框中。
功能2:在主UI界面中點選“插入模闆”按鈕,就彈出一個窗體列出一些短信,選擇一條
短信後關閉短信大全頁面,将将選擇的短信傳回顯示到主UI界面的短信内容文本框
分析:上面的需求,也涉及到頁面跳轉和資料傳遞,不同的是被調用的頁面在關閉的同時還要
向調用者(主UI界面)傳回選擇的資料。那麼,這個應用要求的技術有以下幾點:
1)主UI界面在啟動其它Activity的時候,應當使用startActivityForResult的方式,并
複寫Activity的onActivityResult方法。
2)兩個傳回資料的ListView都要設定item點選事件,在事件中傳回資料并關閉頁面。
3)發送短信的功能
核心代碼:
1)短信模闆頁面
因為ListView隻需顯示單列資料,擴充卡就直接使用ArrayAdapter了。
2)選擇聯系人頁面
3)主UI頁面
★擷取模闆頁面和聯系頁面資料并顯示
★發送短信
通過SmsManager這個類,注意它的擷取方式是通過SmsManager.getDefault方法
與打電話不同,打電話是通過隐式意圖來調用的。
記得要在清單檔案裡加上權限:
<uses-permission android:name="android.permission.SEND_SMS"/>
7.Android中的任務棧
棧 :先進後出
隊列 先進先出
任務棧 :是用來維護Activity的
,| Activity是用來維護使用者的操作體驗的
打開一Activity 叫
進棧
關閉一個Activity 出棧
我們使用者操作的Activity
永遠是棧頂的Activity
說我們應用程式退出了
實際上是任務棧清空了
一般情況下
一個應用程式對應一個任務棧
8.Android中4種啟動模式
1.android:launchMode="standard"(預設)
2.singletop 單一頂部模式 在activity的配置檔案中設定android:launchMode="singleTop"
如果任務棧的棧頂存在這個要開啟的activity,不會重新的建立activity,而是複用已經存在
的activity。保證棧頂Activity如果存在,不會重複建立。
應用場景:浏覽器的書簽
3. singetask 單一任務棧,在目前任務棧裡面隻能有一個執行個體存在
當開啟activity的時候,就去檢查在任務棧裡面是否有執行個體已經存在,如果有執行個體存在就複用
這個已經存在的activity,并且把這個activity上面的所有的别的activity都清空,複用這個已經
存在的activity。保證整個任務棧裡面一個Activity隻有一個執行個體存在
應用場景:浏覽器的activity
如果一個activity的建立需要占用大量的系統資源(cpu,記憶體)一般配置這個activity為
singletask的啟動模式。webkit核心
c代碼
4.singleInstance啟動模式非常特殊, activity會運作在自己的任務棧裡面,并且這個任務棧裡面
隻有一個執行個體存在
如果你要保證一個activity在整個手機作業系統裡面隻有一個執行個體存在,使用singleInstance
應用場景: 來電頁面 有道詞典
和Activity相關的其它技術點:
1.當 Activity 以全屏模式運作時,如何允許 Android 系統狀态欄在頂層出現,而不迫使 Activity 重新布局讓
出空間?
http://www.zhihu.com/question/19760889
1.設定activity不可點選
9.LoadManager
https://blog.csdn.net/bangyiqing/article/details/17475179
http://www.voidcn.com/article/p-zyuprzwa-bsv.html
9.Android螢幕旋轉導緻Activity重建的幾種解決辦法
https://blog.csdn.net/a_salty_fish/article/details/91491147