成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Activity 使用詳解

Caicloud / 1778人閱讀

摘要:極力推薦文章歡迎收藏干貨分享閱讀五分鐘,每日十點,和您一起終身學(xué)習(xí),這里是程序員本篇文章主要介紹開發(fā)中的部分知識點,通過閱讀本篇文章,您將收獲以下內(nèi)容生命周期簡介必須在中注冊啟動的方法啟動帶返回值的結(jié)束方法狀態(tài)保存,恢復(fù)的方法面

極力推薦文章:歡迎收藏
Android 干貨分享

閱讀五分鐘,每日十點,和您一起終身學(xué)習(xí),這里是程序員Android

本篇文章主要介紹 Android 開發(fā)中的部分知識點,通過閱讀本篇文章,您將收獲以下內(nèi)容:

Activity 生命周期 簡介

Activity 必須在AndroidMainfest.xml 中注冊

啟動Activity 的方法

啟動帶返回值的Activity

Activity結(jié)束 方法

Activity狀態(tài)保存,恢復(fù)的方法

面試中經(jīng)常問到的例子

Activity Android 最基本的四大組件之一(Activity 活動,Service 服務(wù),ContentProvider 內(nèi)容提供者,BroadcastReceiver 廣播),Activity主要負(fù)責(zé)與用戶進(jìn)行交互,是每位Android 開發(fā)必須掌握的知識點。

1. Activity 生命周期 簡介

首先我們需要了解一下Activity的繼承關(guān)系。

Activity 繼承關(guān)系

Activity 繼承關(guān)系如下:

java.lang.Object
   ?    android.content.Context
        ?    android.content.ContextWrapper
             ?    android.view.ContextThemeWrapper
                  ?    android.app.Activity

理解完Activity的繼承關(guān)系后,我們開始了解Activity的聲明周期,Activity的生命周期直接影響到與用戶的交互,此聲明周期很重要。

Activity 生命周期

Activity 生命周期圖如下:

在代碼中 Activity生命周期回調(diào)方法

Activity生命周期回調(diào)方法如下:

    // Activity 創(chuàng)建方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "----onCreate----");
        setContentView(R.layout.activity_methods);
    }

    // Activity 在最新任務(wù)列表中打開時候會走此方法
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "----onRestart----");
    }

    // Activity 在onCreate 或者 onRestart之后執(zhí)行
    @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 銷毀時候調(diào)用此方法
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "----onDestroy----");
    }
Activity 4 種 生命周期狀態(tài)

Activity 常見的四種生命周期狀態(tài)如下:

Active 運(yùn)行狀態(tài)

Pause 暫停狀態(tài)

Stop 停止?fàn)顟B(tài)

Killed 消亡狀態(tài)

2. Activity 必須在 AndroidMainfest.xml 中注冊

Activity 是四大組件之一,Android規(guī)定四大組件必須在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 標(biāo)簽

android.action.MAIN :
表示是當(dāng)前App的入口 main 方法類。

android.intent.category.LAUNCHER:
表示 此Action 會被Launcher 掃描到,可以顯示在LauncherIcon列表上,如果去掉此Action,則無法在Launcher 種查看到此appIcon。


       
         
         
       
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);
處理返回值的回調(diào)方法
 //    獲取 Activity 返回結(jié)果的方法
    @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設(shè)置返回值的方法
                int resultCode = 101;
                Intent intent = new Intent();
                intent.putExtra("str_set_result", "帶返回結(jié)果的Activity");
                setResult(resultCode, intent);
5. Activity結(jié)束 方法

如果想結(jié)束掉當(dāng)前Activity ,可以調(diào)用一下方法

        //1.直接調(diào)用finish方法 ,結(jié)束當(dāng)前Activity
        finish();
        //2.根據(jù)請求碼結(jié)束Activity
        finishActivity(int requestCode);
6. Activity狀態(tài)保存,恢復(fù)的方法

當(dāng)Activity 異常退出時候,Activity 會自動保存一些數(shù)據(jù),但是,如果是app重要數(shù)據(jù),還請在代碼中手動保存Bundle類型的數(shù)據(jù),防止Activity保存的數(shù)據(jù)不理想。

Activity 狀態(tài)保存與恢復(fù)

Activity 狀態(tài)保存與恢復(fù)的周期圖如下:

Activity 狀態(tài)保存與恢復(fù)的回調(diào)方法

Activity 狀態(tài)保存與恢復(fù)的回調(diào)方法如下:

    // Activity 恢復(fù)數(shù)據(jù)的方法,經(jīng)常在 oncreate 方法中恢復(fù)數(shù)據(jù)
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(TAG, "----onRestoreInstanceState----");
    }

    // Activity 保存數(shù)據(jù)的方法,經(jīng)常在 onPause 方法中保存數(shù)據(jù)
    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        Log.i(TAG, "----onSaveInstanceState----");
    }
7. 面試中經(jīng)常問到的例子 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 ,跳轉(zhuǎn)到B,此時聲明周期關(guān)系如下:

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----

結(jié)束 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----

總結(jié):
Activity A 啟動 Activity B, 簡述一下其生命周期? 大致流程如下圖:

至此,本篇已結(jié)束,如有不對的地方,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75819.html

相關(guān)文章

  • Fragment 使用詳解

    摘要:必須嵌套在中,其生命周期受生命周期的影響。利用實現(xiàn)此類設(shè)計時,您無需管理對視圖層次結(jié)構(gòu)的復(fù)雜更改。您應(yīng)該將每個都設(shè)計為可重復(fù)使用的模塊化組件。使用與進(jìn)行交互開啟事務(wù)將填充到創(chuàng)建的容器中提交事務(wù)。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極力推薦文章:歡迎收藏Android 干貨分...

    ningwang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<