摘要:極力推薦文章歡迎收藏干貨分享閱讀五分鐘,每日十點,和您一起終身學習,這里是程序員本篇文章主要介紹開發中的部分知識點,通過閱讀本篇文章,您將收獲以下內容生命周期簡介必須在中注冊啟動的方法啟動帶返回值的結束方法狀態保存,恢復的方法面
極力推薦文章:歡迎收藏
Android 干貨分享
本篇文章主要介紹 Android 開發中的部分知識點,通過閱讀本篇文章,您將收獲以下內容:
Activity 生命周期 簡介
Activity 必須在AndroidMainfest.xml 中注冊
啟動Activity 的方法
啟動帶返回值的Activity
Activity結束 方法
Activity狀態保存,恢復的方法
面試中經常問到的例子
Activity 是Android 最基本的四大組件之一(Activity 活動,Service 服務,ContentProvider 內容提供者,BroadcastReceiver 廣播),Activity主要負責與用戶進行交互,是每位Android 開發必須掌握的知識點。
1. Activity 生命周期 簡介首先我們需要了解一下Activity的繼承關系。
Activity 繼承關系Activity 繼承關系如下:
java.lang.Object ? android.content.Context ? android.content.ContextWrapper ? android.view.ContextThemeWrapper ? android.app.Activity
理解完Activity的繼承關系后,我們開始了解Activity的聲明周期,Activity的生命周期直接影響到與用戶的交互,此聲明周期很重要。
Activity 生命周期Activity 生命周期圖如下:
在代碼中 Activity生命周期回調方法Activity生命周期回調方法如下:
// Activity 創建方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "----onCreate----"); setContentView(R.layout.activity_methods); } // Activity 在最新任務列表中打開時候會走此方法 @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "----onRestart----"); } // Activity 在onCreate 或者 onRestart之后執行 @Override protected void onStart() { super.onStart(); Log.i(TAG, "----onStart----"); } // 正在與用戶交互的界面 @Override protected void onResume() { super.onResume(); Log.i(TAG, "----onResume----"); } // 被其他與用戶交互的Activity 部分覆蓋 @Override protected void onPause() { super.onPause(); Log.i(TAG, "----onPause----"); } // 被其它與用戶交互的Activity 全部覆蓋 @Override protected void onStop() { super.onStop(); Log.i(TAG, "----onStop----"); } // Activity 銷毀時候調用此方法 @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "----onDestroy----"); }Activity 4 種 生命周期狀態
Activity 常見的四種生命周期狀態如下:
Active 運行狀態
Pause 暫停狀態
Stop 停止狀態
Killed 消亡狀態
2. Activity 必須在 AndroidMainfest.xml 中注冊Activity 是四大組件之一,Android規定四大組件必須在AndroidMainfest.xml 中注冊,Activity 如果不注冊,則會引起 App Crash 報錯。
ActivityNotFoundException如Activity不在AndroidMainfest.xml中注冊,則app將會報錯,報錯主要異常信息如下 :
ActivityNotFoundException
例如以下報錯信息:
//提示未在 AndroidMainfest.xml 中找到Activity類的聲明 android.content.ActivityNotFoundException:Unable to find explicit activity class //具體類名,包名如下: {com.wj.utils/com.wj.utils.basewidget.BaseButtonMethods}; //需要在AndroidManifest 中聲明 have you declared this activity in your AndroidManifest.xml?Activity 注冊方法如下:
常用Action 標簽... ...
android.action.MAIN :
表示是當前App的入口 main 方法類。
android.intent.category.LAUNCHER:
表示 此Action 會被Launcher 掃描到,可以顯示在Launcher的Icon列表上,如果去掉此Action,則無法在Launcher 種查看到此app的Icon。
3. 啟動Activity 的方法 顯示啟動
Intent intent = new Intent(ActivityMethods.this, OtherActivity.class) startActivity(intent);隱式啟動
Intent intent = new Intent("string_action"); // intent.setAction("string_action"); startActivity(intent);4. 啟動帶返回值的Activity 啟動帶返回值的Activity方法
Intent intent = new Intent(); intent.setClass(ActivityMethods.this, OtherActivity.class); startActivityForResult(intent, mRequestCode);處理返回值的回調方法
// 獲取 Activity 返回結果的方法 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == mRequestCode && resultCode == mResultCode) { String result = data.getStringExtra("str_set_result"); Toast.makeText(this, "result :" + result, Toast.LENGTH_SHORT).show(); } }被啟動Activity設置返回值的方法
int resultCode = 101; Intent intent = new Intent(); intent.putExtra("str_set_result", "帶返回結果的Activity"); setResult(resultCode, intent);5. Activity結束 方法
如果想結束掉當前Activity ,可以調用一下方法
//1.直接調用finish方法 ,結束當前Activity finish(); //2.根據請求碼結束Activity finishActivity(int requestCode);6. Activity狀態保存,恢復的方法
當Activity 異常退出時候,Activity 會自動保存一些數據,但是,如果是app重要數據,還請在代碼中手動保存Bundle類型的數據,防止Activity保存的數據不理想。
Activity 狀態保存與恢復Activity 狀態保存與恢復的周期圖如下:
Activity 狀態保存與恢復的回調方法Activity 狀態保存與恢復的回調方法如下:
// Activity 恢復數據的方法,經常在 oncreate 方法中恢復數據 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.i(TAG, "----onRestoreInstanceState----"); } // Activity 保存數據的方法,經常在 onPause 方法中保存數據 @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); Log.i(TAG, "----onSaveInstanceState----"); }7. 面試中經常問到的例子 Activity A 啟動 Activity B, 然后再返回A,簡述一下其生命周期?
首先 A 啟動的聲明周期如下:
01-02 21:25:22.357 21225-21225/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onCreate---- 01-02 21:25:22.396 21225-21225/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onStart---- 01-02 21:25:22.402 21225-21225/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onResume----
點擊A中的Button ,跳轉到B,此時聲明周期關系如下:
01-02 21:28:30.617 23845-23845/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onPause---- 01-02 21:28:30.723 23845-23845/com.android.program.programandroid I/OtherActivity?wjwj:: ----onCreate---- 01-02 21:28:30.729 23845-23845/com.android.program.programandroid I/OtherActivity?wjwj:: ----onStart---- 01-02 21:28:30.738 23845-23845/com.android.program.programandroid I/OtherActivity?wjwj:: ----onResume---- 01-02 21:28:31.320 23845-23845/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onStop----
結束 B,返回 A ,生命周期如下:
01-02 21:29:38.646 23845-23845/com.android.program.programandroid I/OtherActivity?wjwj:: ----onPause---- 01-02 21:29:38.668 23845-23845/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onRestart---- 01-02 21:29:38.672 23845-23845/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onStart---- 01-02 21:29:38.674 23845-23845/com.android.program.programandroid I/ActivityMethods?wjwj:: ----onResume---- 01-02 21:29:39.058 23845-23845/com.android.program.programandroid I/OtherActivity?wjwj:: ----onStop---- 01-02 21:29:39.059 23845-23845/com.android.program.programandroid I/OtherActivity?wjwj:: ----onDestroy----
總結:
Activity A 啟動 Activity B, 簡述一下其生命周期? 大致流程如下圖:
至此,本篇已結束,如有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75819.html
摘要:必須嵌套在中,其生命周期受生命周期的影響。利用實現此類設計時,您無需管理對視圖層次結構的復雜更改。您應該將每個都設計為可重復使用的模塊化組件。使用與進行交互開啟事務將填充到創建的容器中提交事務。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極力推薦文章:歡迎收藏Android 干貨分...
閱讀 3168·2021-11-22 09:34
閱讀 2806·2021-09-22 15:28
閱讀 836·2021-09-10 10:51
閱讀 1866·2019-08-30 14:22
閱讀 2333·2019-08-30 14:17
閱讀 2747·2019-08-30 11:01
閱讀 2306·2019-08-29 17:19
閱讀 3674·2019-08-29 13:17