一、Activity概述
Android應用程序是由許多Activity組成的。一個Activity代表一個屏幕上的窗口。用戶與應用程序交互時,Activity會接收用戶的輸入並處理屏幕輸出。Activity的啟動流程是Android應用程序中至關重要的一個環節。
二、Activity的生命周期
一個Activity的生命周期可以分為四個階段:
1. 創建階段
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } }
在創建階段中,首先調用了onCreate()方法。在這個方法中,我們可以初始化Activity,比如設置布局文件、獲取控件等。
2. 運行階段
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } @Override protected void onStart() { super.onStart(); // Activity 準備開始 } @Override protected void onResume() { super.onResume(); // Activity 進入前台 } }
在運行階段中,Activity已經準備好了。在Activity變成前台窗口之前,onStart()方法會被調用,在Activity變成前台窗口之後,onResume()方法會被調用。
3. 暫停階段
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } @Override protected void onStart() { super.onStart(); // Activity 準備開始 } @Override protected void onResume() { super.onResume(); // Activity 進入前台 } @Override protected void onPause() { super.onPause(); // Activity 進入後台 } }
在暫停階段中,onPause()方法會被調用。在這個方法中,我們可以保存一些需要持久化的數據,比如用戶輸入的內容。
4. 停止階段
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } @Override protected void onStart() { super.onStart(); // Activity 準備開始 } @Override protected void onResume() { super.onResume(); // Activity 進入前台 } @Override protected void onPause() { super.onPause(); // Activity 進入後台 } @Override protected void onStop() { super.onStop(); // Activity 被停止 } }
在停止階段中,onStop()方法會被調用。在這個方法中,我們可以釋放一些資源。
三、Activity之間的跳轉
在Android應用程序中,Activity之間的跳轉是非常普遍的。Activity之間的啟動方式有兩種:
1. 顯式啟動
Intent intent = new Intent(this, MyActivity.class); startActivity(intent);
上述代碼中,我們使用了一個Intent對象,將要啟動的Activity的類名傳遞給了Intent對象。然後調用startActivity()方法來啟動Activity。
2. 隱式啟動
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent);
這裡我們使用了一個Intent對象,並將其設置為ACTION_VIEW類型,同時將一個Uri對象傳遞給了Intent對象。系統會根據Uri的Scheme、Type、Category等屬性,匹配到適合的Activity來啟動。
四、Activity啟動流程
在一個Activity啟動另一個Activity時,系統必須執行以下操作:
1. 創建要啟動的Activity對象
系統會根據Intent指定的類名,使用Java反射機制創建一個Activity對象。
2. 構建要啟動的Activity的環境
系統會調用ActivityThread的handleLaunchActivity()方法,來構建要啟動的Activity的環境。
final ActivityClientRecord r = new ActivityClientRecord(); r.token = appToken; r.ident = ident; r.intent = intent; r.isProfiling = (flags&Profiler.FLAG_PROFILING)!=0; ... Activity a = performLaunchActivity(r, customIntent);
3. 調用onCreate()方法
系統會調用Activity的onCreate()方法,來進行一些初始化工作。
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); } }
4. 加載布局文件
系統會解析布局文件,並將解析後的視圖加入到Activity的View樹中。
setContentView(R.layout.activity_my);
5. 構建OptionsMenu
如果Activity需要顯示OptionsMenu,系統會調用Activity的onCreateOptionsMenu()方法,來構建要顯示的Menu。
public class MyActivity extends Activity { @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.activity_my_menu, menu); return true; } }
6. 生命期回調方法
系統會依次調用Activity的各個生命期回調方法,包括onStart()、onResume()、onPause()、onStop()、onDestroy()等。
五、總結
Android應用程序中Activity是核心組件之一,它的啟動流程至關重要。本文對Activity的生命周期、Activity之間的跳轉以及Activity的啟動流程進行了詳細闡述。
原創文章,作者:WZRPK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372878.html