1. 程式人生 > >Activity生命週期互動設計思想和應用場景(附原始碼)

Activity生命週期互動設計思想和應用場景(附原始碼)

Activity生命週期互動設計思想
1.在多個Activity進行互動的時候,為什麼要先暫停(onPause()方法)當前的Activity,執行新的Activity的onCreate()方法,onStart()方法,onResume()方法?

答:比如當你正在一個頁面(Activity)上看視訊,此時,頁面正處於onResume()方法。正在這個時候,突然來了一個電話。此時Android的處理是:首先把第一個視訊的頁面暫停(onPause()方法),然後再執行第二個頁面的onCreate()方法,onStart()方法,onRsume()方法。當第二個頁面獲得焦點(onResume()方法)

的時候,新的頁面成功開啟的時候,才停止(onStop()方法)第一個頁面。如果在新開啟的頁面onCreate()方法執行之前,就停止(onStop()方法)的話,如果第二個頁面由於其它原因開啟失敗,那就會出現黑屏狀態。

2.Activity橫豎屏切換:
首先Activity先執行一個生命週期的函式,然後再重新建立一個新的Activity。
以下是Android在橫豎屏切換的時候呼叫的方法:儲存資訊在引數中。

 /**
     * 儲存資訊到引數中
     */
    @Override
    protected void onSaveInstanceState
(Bundle outState) { super.onSaveInstanceState(outState); /** * 儲存資訊 */ outState.putString("key", "value"); } /** * 引數中取出儲存的資訊 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 取出儲存的資訊 */
if (savedInstanceState != null) { String value = savedInstanceState.getString("key"); } }

3.Android生命週期應用場景:

(1).onDestory()方法:釋放掉與Activity相關的一些屬性,為了防止記憶體洩漏,在優化等方面很重要。

(2).Activity啟動的方式:

A:顯示啟動方式:直接通過類名來啟動。

Intent intent = new Intent(MainActivity.this,SecondActiivty.class);
startActivity(intent);

B.隱式啟動方式:通過設定Action屬性標籤和種類標籤。應用於啟動不知類名的Activity。例如啟動系統的類名。不是啟動本應用程式的Activity。如下啟動系統常見的Activity:
(1).啟動系統的瀏覽器:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.parse("https://www.baidu.com/");
intent.setData(uri);
startActivity(intent);

(2).啟動相簿:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent,0);

(3).傳送簡訊:

Uri uri = Uri.parse("smsto:13607567010");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "The SMS text");
startActivity(intent);
<uses-permission android:name="android.permission.SEND_SMS" />

(4).啟動電話介面:

Uri uri = Uri.parse("tel:13607567010");
Intent intent = new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);
<uses-permission android:name="android.permission.CALL_PHONE" />