资讯专栏INFORMATION COLUMN

Activity 使用详解

Caicloud / 1585人阅读

摘要:极力推荐文章欢迎收藏干货分享阅读五分钟,每日十点,和您一起终身学习,这里是程序员本篇文章主要介绍开发中的部分知识点,通过阅读本篇文章,您将收获以下内容生命周期简介必须在中注册启动的方法启动带返回值的结束方法状态保存,恢复的方法面

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

阅读五分钟,每日十点,和您一起终身学习,这里是程序员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 扫描到,可以显示在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);
处理返回值的回调方法
 //    获取 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, 简述一下其生命周期? 大致流程如下图:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75819.html

相关文章

  • Fragment 使用详解

    摘要:必须嵌套在中,其生命周期受生命周期的影响。利用实现此类设计时,您无需管理对视图层次结构的复杂更改。您应该将每个都设计为可重复使用的模块化组件。使用与进行交互开启事务将填充到创建的容器中提交事务。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 极力推荐文章:欢迎收藏Android 干货分...

    ningwang 评论0 收藏0

发表评论

0条评论

Caicloud

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<