Android關於Activity

一、Activity本質是什麼

承載界面的框架

二、Activity的生命週期

這裏寫圖片描述
1、一個Activitry生命週期:
顯示狀態:create、start、resume
看不見狀態:pause、stop
銷燬狀態:destory
2、多個Activity交互的生命週期
A打開B時
這裏寫圖片描述
3、Activity生命週期交互設計思想
1)爲什麼要先暫停當前顯示的Activity?
eg:如果有視頻播放時,有電話進來,則電話聲和視頻聲在一起
2)爲什麼要先執行要打開的Activity的onCreate,onStart,onResume方法?
3)再打開新的Activity的時候,爲什麼不先執行當前Activity的onPause,onStop方法呢?
安全保護機制,如果啓動SecondActivity有異常,則會被crush閃退,mainActivity又處於不可見(onStop)狀態,則用戶會看到黑屏

三、屏幕切換與應用場景

1、橫豎屏切換
1)、不設置Activity的android:configChanges時,切屏會重新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次
2)設置Activity的android:configChanges=”orientation”時,切屏還是會重新調用各個生命週期,切橫、豎屏時只會執行一次
3)設置Activity的android:configChanges=”orientation|keyboardHidden”時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法
新生命週期

2、生命週期應用場景
在onPause、onResume方法中寫

四、啓動Activity

1、Activity啓動的兩種方式
1)直接啓動
2)匿名啓動:啓動其他app
Category屬性用於指定當前動作(Action)被執行的環境

            <intent-filter>
                <action android:name="www"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
    @Override
    public void onClick(View view) {
        Intent intent = new Intent();
        intent.setAction("www");
        startActivity(intent);
    }

2、啓動系統常見的Activity
啓動系統瀏覽器

intent.setAction(Intent.ACTION_VIEW);
Uri url=Uri.parse("http://www.baidu.com");
intent.setData(url);
startActivity(intent);

啓動相冊

intent.setAction(Intent.ACTION_GET_CONTEXT);
intent.setType("image/*")
intent.setData(url);
startActivity(intent);

發送短信

intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"hello");
startActivity(intent);

啓動電話界面

intent.setAction(Intent.ACTION_VIEW);
Uri url=Uri.parse("tel:123456");
intent.setData(url);
startActivity(intent);

五、Activity中的任務棧

1、Activity的Task和啓動模式
1)Task(任務)
2)Back Stack(後臺任務棧)

        <activity android:name=".FirstActivity" android:process=":FirstActivity"></activity>

3)adb查看Activity命令
shell dumpsys activity
Running activities顯示當前活動的Activity
4)android:launchMode
(1)standard
(2)singleTop:棧頂A,啓動它自己不會重新創建
(3)singleTask:只能存在一個唯一的實例
(4)singleInstance:創建一個新的任務棧

六、FrameWork介紹

1、Framework層的類介紹-ActivityThread
1)ActivityThread是什麼
(1)它本身不是一個線程
(2)ActivityThread如何被啓動?
它運行在Activity進程中的一個主線程方法中,先調用main,創建一個消息輪詢對象Looper.prepareMainLooper(),在創建一個自己的對象ActivityThread thread = new ActivityThread();再調用自己的thread.attach(false)方法,進行相關處理,最後調用Looper.loop()輪詢。
(3)ActivityThread啓動完成後如何通知AMS?
IactivityManager mar = ActivityManagerNative.getDefault();
mgr.attachApplication(mAppThread);

2、ApplicationThread相關類介紹
ApplicationThread
ActivityClientRecord:activityInfo有主題,權限,目標信息等
ActivityRecord:ActivityManagerService存儲Activity記錄

3、Context類介紹
Activity相關的所依賴的環境,實則是一個接口

七、FrameWork介紹

1、Activity是什麼和其他類有什麼區別
作爲一個整體框架、控制,Activity中的生命週期爲了控制界面顯示,由FrameWork作統一處理(比如進程間通信、生命週期)

2、Activity的生命週期的方法是什麼時候回調的
Instrumentation:打開Activity的各種生命週期的方法,創建Application
ActivityManagerNative:操縱遠程的Activity服務進行通信
H hanlder:處理Activity服務發送來的具體消息

3、Activity、Window、WindowManger三者之間的關係
Activity作爲控制結構(View是顯示的一個佈局、Mode就是對應的展示的數據)負責界面的一個控制。
Window:view添加在Window對象中
WindowManger:顯示過程控制,控制界面什麼時候顯示和移除,客戶端代理的一個對象。

4、onStop,onDestroy分析
Activity如何設置不可見狀態:在updateVisibility方法中更新
onDestroy真的銷燬了Activity

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章