Android 四大组件之一 Activity

Activity 是Android 最基本的四大组件之一(Activity 活动,Service 服务,ContentProvider 内容提供者,BroadcastReceiver 广播),主要负责与用户进行交互,通过本篇文章学习,可以大体掌握Activity的使用方法。

继承关系如下:

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

本文最主要知识点如下:

1.Activity 生命周期
2.必须在 AndroidManfest.xml 中注册否则运行报错
3.启动 Activity 的方法
4.启动带返回值 Activity 的方法
5.结束 Activity 的方法
6.保存 Activity 状态的方法
7.面试中经常问到的知识点

1.Activity 生命周期 简介

  • Activity 生命周期图如下:

    0?wx_fmt=png

    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 种生命周期状态

1. Active  运行状态
2. Pause   暂停状态
3. Stop    停止状态
4. Killed  消亡状态

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

四大组件必须在AndroidMainfest.xml 中注册,如果不声明注册,会引起 app 运行时报错,主要报找不到类异常 :ActivityNotFoundException

//提示未在 AndroidMainfest.xml 中找到Activity类的声明
android.content.ActivityNotFoundException:Unable to find explicit activity class 
//具体类名,包名如下:
{com.wj.utils/com.wj.utils.basewidget.BaseButtonMethods}; have you declared this activity in your AndroidManifest.xml?                                                   
  • 常用Action 标签

<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

  • 启动方法

        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();
        }

    }
  • 设置返回值的方法

                int resultCode = 101;
                Intent intent = new Intent();
                intent.putExtra("str_set_result", "带返回结果的Activity");
                setResult(resultCode, intent);

5.Activity结束 方法

        finish();
        //或者根据请求码结束Activity
        finishActivity(int requestCode);

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

0?wx_fmt=png

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.面试中经常问到的例子

  • 首先 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生命周期大致图0?wx_fmt=png

欢迎关注微信公众号:程序员Android

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。

0?wx_fmt=gif

点击阅读原文,获取更多福利(包含源码哦smiley_79.png)

0?wx_fmt=gif

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值