Activity 使用详解

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=jpeg

极力推荐文章:欢迎收藏Android 干货分享 

640?wx_fmt=other

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. Activity 生命周期 简介

  2. Activity 必须在AndroidMainfest.xml 中注册

  3. 启动Activity 的方法

  4. 启动带返回值的Activity

  5. Activity结束 方法

  6. Activity状态保存,恢复的方法

  7. 面试中经常问到的例子

ActivityAndroid最基本的四大组件之一(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 生命周期图如下:

640?wx_fmt=other

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常见的四种生命周期状态如下:

  1. Active 运行状态

  2. Pause 暂停状态

  3. Stop 停止状态

  4. 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?       
                                            

640?wx_fmt=other

ActivityNotFoundException 异常Log 分析

Activity 注册方法如下:

<manifest ... >
  <application ... >
      <activity android:name=".BaseButtonMethods" />
      ...
  </application ... >
  ...
</manifest >

常用Action 标签

android.action.MAIN:App的入口 main 方法类。

android.intent.category.LAUNCHER:Action 会被Launcher扫描到,可以显示在LauncherIcon列表上,如果去掉此Action,则无法在Launcher种查看到此appIcon

<activity android:name=".MainActivity">
       <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
</activity>

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 状态保存与恢复的周期图如下:

640?wx_fmt=jpeg

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,简述一下其生命周期?

  1. 首先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----
  1. 点击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----
  1. 结束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, 简述一下其生命周期? 大致流程如下图:

640?wx_fmt=other

Activity A 启动 Activity B, 然后再返回A生命周期大致图

640?wx_fmt=other

640?wx_fmt=jpeg

长按识别二维码,领福利

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

640?wx_fmt=gif

640?wx_fmt=png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值