广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    Android Studio 之 Activity的函数生命周期

    来源:网络收集  点击:  时间:2024-06-17
    【导读】:
    Android Studio 之 Activity的函数生命周期。本节介绍,在Android Studio 开发中,单个Activity的函数生命周期,尤其需要注意的是多个Activity中各个Activity的函数生命周期,以及不同形式的Activity在使用中的函数生命周期,具体如下工具/原料moreAndroid Studio方法/步骤1/23分步阅读

    打开Android Studio,新建一个 Empty Activity,具体如下图

    2/23

    一、测试单个Activity的函数生命周期

    在 MainActivity 中添加各个函数,并对应添加打印信息,以便观察在函数生命周期中的调用,函数包括 onCreate(), onRestart(), onStart(), onResume(), onPause(), onStop(), onDestroy(), 具体如下图

    3/23

    MainActivity 脚本的具体内容如下:

    package com.example.xan.activitylifetest;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.widget.Toast;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println(===== MainActivity.onCreate); } @Override protected void onRestart() { super.onRestart(); System.out.println(===== MainActivity.onRestart); } @Override protected void onStart() { super.onStart(); System.out.println(===== MainActivity.onStart); } @Override protected void onResume() { super.onResume(); System.out.println(===== MainActivity.onResume); } @Override protected void onPause() { super.onPause(); System.out.println(===== MainActivity.onPause); } @Override protected void onStop() { super.onStop(); System.out.println(===== MainActivity.onStop); } @Override protected void onDestroy() { super.onDestroy(); System.out.println(===== MainActivity.onDestroy); }}

    4/23

    此时可以连接设备,或者使用虚拟设备进行编译测试,机子上运行效果,具体如下图

    5/23

    在Android Studio 的Logcat 打印中,添加一个System.out 的过滤器,方便查看各个函数接口的打印信息,具体如下图

    6/23

    此时 MainActivity 中函数的打印信息,即为在创建 MainActivity 时在生命周期中的打印顺序,为 onCreate -- onStart() -- onResume(),具体如下图

    7/23

    按下返回键,退出 MainActivity ,销毁时各个函数在生命周期中的执行顺序,为 onPause() -- onStop -- onDestroy(), 所以单个 Activity 的整个生命周期大概为 :onCreate -- onStart() -- onResume() -- onPause() -- onStop -- onDestroy(),具体如下图

    8/23

    二、现在来测试,两个 Activity 中,一个Activity 调用另一个 Activity ,再回到原来Activity,在退出时,两个 Activity 的生命周期。

    添加一个SecondActivity,代码类似 MainActivity,只是打印信息不同,以作区分,具体如下图

    9/23

    SecondActivity 脚本的具体内容如下:

    package com.example.xan.activitylifetest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); System.out.println(===== SecondActivity.onRestart); } @Override protected void onRestart() { super.onRestart(); System.out.println(===== SecondActivity.onRestart); } @Override protected void onStart() { super.onStart(); System.out.println(===== SecondActivity.onStart); } @Override protected void onResume() { super.onResume(); System.out.println(===== SecondActivity.onResume); } @Override protected void onPause() { super.onPause(); System.out.println(===== SecondActivity.onPause); } @Override protected void onStop() { super.onStop(); System.out.println(===== SecondActivity.onStop); } @Override protected void onDestroy() { super.onDestroy(); System.out.println(===== SecondActivity.onDestroy); }}

    10/23

    在 MainActivity 函数中,添加一个点击跳转到 SecondActivity 页面的触发事件,具体如下图

    11/23

    MainActivity 脚本具体内容如下:

    package com.example.xan.activitylifetest;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.widget.Toast;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println(===== MainActivity.onCreate); } @Override protected void onRestart() { super.onRestart(); System.out.println(===== MainActivity.onRestart); } @Override protected void onStart() { super.onStart(); System.out.println(===== MainActivity.onStart); } @Override protected void onResume() { super.onResume(); System.out.println(===== MainActivity.onResume); } @Override protected void onPause() { super.onPause(); System.out.println(===== MainActivity.onPause); } @Override protected void onStop() { super.onStop(); System.out.println(===== MainActivity.onStop); } @Override protected void onDestroy() { super.onDestroy(); System.out.println(===== MainActivity.onDestroy); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN){ Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); Toast.makeText(this,跳转到 Second Activity,Toast.LENGTH_SHORT).show(); return true; } return super.onTouchEvent(event); }}

    12/23

    在编译运行前,检查 SecondActivity 是否在 AndroidManifest 中注册,没有就注册,具体如下图

    13/23

    AndroidManifest.xml 具体内容如下:

    ?xml version=1.0 encoding=utf-8?manifest xmlns:android=http://schemas.android.com/apk/res/android package=com.example.xan.activitylifetest application android:allowBackup=true android:icon=@mipmap/ic_launcher android:label=@string/app_name android:roundIcon=@mipmap/ic_launcher_round android:supportsRtl=true android:theme=@style/AppTheme activity android:name=.MainActivity intent-filter action android:name=android.intent.action.MAIN / category android:name=android.intent.category.LAUNCHER / /intent-filter /activity activity android:name=.SecondActivity /activity /application/manifest

    14/23

    编译在设备上运行结果,首先创建的MainActivity的时候,函数声中周期中的执行顺序为MainActivity.onCreate -- MainActivity.onStart() -- MainActivity.onResume(),点击跳转到 SecondActivity页面的时候,两个Activity中函数在生命周期中的执行顺序为:MainActivity.onPause() --SecondActivity.onRestart()--SecondActivity.onStart()--SecondActivity.onResume()--MainActivity.onStop(),具体如下图

    15/23

    接着按返回,从SecondActivity 返回到 MainActivity ,两个Activity中函数在生命周期中的执行顺序为:SecondActivity.onPause()--MainActivity.onRestart()--MainActivity.onStart()--MainActivity.onResume()--SecondActivity.onStop()--SecondActivity.onDestroy();最后再按返回键,退出MainActivity时,函数在生命周期中的执行顺为:MainActivity.onPause()--MainActivity.onStop()--MainActivity.onDestroy(),具体如下图

    16/23

    所以两个相互完全覆盖的Activity界面在整个生命周期中函数的执行总顺序为:MainActivity.onCreate --MainActivity.onStart() --MainActivity.onResume()--MainActivity.onPause() --SecondActivity.onRestart()--SecondActivity.onStart()--SecondActivity.onResume()--MainActivity.onStop()--SecondActivity.onPause()--MainActivity.onRestart()--MainActivity.onStart()--MainActivity.onResume()--SecondActivity.onStop()--SecondActivity.onDestroy()--MainActivity.onPause()--MainActivity.onStop()--MainActivity.onDestroy()

    17/23

    三、如果SecondActivity 的界面不完全覆盖 MainActivity ,那么这两个Activity在生命周期中,函数的执行顺行又是怎样呢

    18/23

    在 AndroidManifest 中给 SecondActivity 添加主题样式为 Dialog ,使得SecondActivity 的界面,不完全覆盖 MainActivity 的界面,具体修改如下图

    19/23

    AndroidManifest.xml 的具体内容如下:

    ?xml version=1.0 encoding=utf-8?manifest xmlns:android=http://schemas.android.com/apk/res/android package=com.example.xan.activitylifetest application android:allowBackup=true android:icon=@mipmap/ic_launcher android:label=@string/app_name android:roundIcon=@mipmap/ic_launcher_round android:supportsRtl=true android:theme=@style/AppTheme activity android:name=.MainActivity intent-filter action android:name=android.intent.action.MAIN / category android:name=android.intent.category.LAUNCHER / /intent-filter /activity activity android:name=.SecondActivity android:theme=@style/Theme.AppCompat.Dialog /activity /application/manifest

    20/23

    连接设备编译运行,首先创建的MainActivity的时候,函数声中周期中的执行顺序为MainActivity.onCreate --MainActivity.onStart() --MainActivity.onResume(),点击跳转到 SecondActivity页面的时候,两个Activity中函数在生命周期中的执行顺序为:MainActivity.onPause()--SecondActivity.onRestart()--SecondActivity.onStart()--SecondActivity.onResume(),这里由于没有完全覆盖MainActivity界面,所以 MainActivity 没有 stop,具体如下图

    21/23

    接着按返回,从SecondActivity 返回到 MainActivity ,两个Activity中函数在生命周期中的执行顺序为:SecondActivity.onPause()--MainActivity.onResume()--SecondActivity.onStop()--SecondActivity.onDestroy(),由于之前Mainactivity 没有 Stop,所以这里MainActivity只要 Resume即可;最后再按返回键,退出MainActivity时,函数在生命周期中的执行顺为:MainActivity.onPause()--MainActivity.onStop()--MainActivity.onDestroy(),具体如下图

    22/23

    所以两个相互不完全覆盖的Activity界面在整个生命周期中函数的执行总顺序为:MainActivity.onCreate --MainActivity.onStart() --MainActivity.onResume()--MainActivity.onPause() --SecondActivity.onRestart()--SecondActivity.onStart()--SecondActivity.onResume()--SecondActivity.onPause()--MainActivity.onResume()--SecondActivity.onStop()--SecondActivity.onDestroy()--MainActivity.onPause()--MainActivity.onStop()--MainActivity.onDestroy()

    23/23

    综上所述,在Activity不同的使用情况中,函数的在生命周期中的执行情况,可能会有所不同,在不同使用中请注意

    注意事项

    您的支持,是我们不断坚持知识分享的动力,若帮到您,还请帮忙投票有得;若有疑问,请留言

    ANDROIDACTIVITY生命周期多个ACTIVITY
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_905912.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 04:21:46  耗时:0.025
    0.0254s