1.3Activity生命周期
Posted Liang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.3Activity生命周期相关的知识,希望对你有一定的参考价值。
Demo:两个Activity,MainActivity和NextActivity和一个按钮。点击按钮,由MainActivity跳转到NextActivity。
Manifest.xml:清单文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.manusas.activitylifecycle"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> 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> <!--dialog不会调用onStop--> <!--<activity android:name=".NextActivity" android:theme="@android:style/Theme.Dialog">--> <activity android:name=".NextActivity"></activity> </application> </manifest>
MainActivity.java
package com.manusas.activitylifecycle; import android.app.Activity; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { private static final String TAG = "loginfo"; private Button button; //回退 //创建Activity @Override protected void onCreate(Bundle savedInstanceState) { Log.i(TAG, "------onCreate-----"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this, NextActivity.class); startActivity(i); } }); } //Activity快要可见 @Override protected void onStart() { Log.i(TAG, "------onStart-----"); super.onStart(); } //Activity变成可见的,处于运行状态 @Override protected void onResume() { Log.i(TAG, "------onResume-----"); super.onResume(); } //其他Activity获得用户焦点,(Activity快要暂停了) @Override protected void onPause() { Log.i(TAG, "------onPause-----"); super.onPause(); } //Activity不再可见,处于停止状态 @Override protected void onStop() { Log.i(TAG, "------onStop-----"); super.onStop(); } //Activity又要快可见了 @Override protected void onRestart() { Log.i(TAG, "------onRestart-----"); super.onRestart(); } //Activity快要被销毁了 @Override protected void onDestroy() { Log.i(TAG, "------onDestroy-----"); super.onDestroy(); } }
NextActivity.java
package com.manusas.activitylifecycle; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class NextActivity extends Activity { private static final String TAG = "lognext"; @Override protected void onCreate(Bundle savedInstanceState) { Log.i(TAG, "------onCreateNext-----"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_next); } @Override protected void onStart() { Log.i(TAG, "------onStartNext-----"); super.onStart(); } @Override protected void onResume() { Log.i(TAG, "------onResumeNext-----"); super.onResume(); } @Override protected void onPause() { Log.i(TAG, "------onPauseNext-----"); super.onPause(); } @Override protected void onStop() { Log.i(TAG, "------onStopNext-----"); super.onStop(); } @Override protected void onRestart() { Log.i(TAG, "------onRestartNext-----"); super.onRestart(); } @Override protected void onDestroy() { Log.i(TAG, "------onDestroyNext-----"); super.onDestroy(); } }
activity_main.xml:主页
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" android:id="@+id/button" android:layout_alignParentTop="true" android:layout_alignParentStart="true" /> </RelativeLayout>
activity_next.xml:跳转页
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:text="Ok!" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
1. 运行应用,MainActivity运行。
可以看出一个Activity运行调用的回调方法是:onCreate()->onStart()->onResume()
2. 点击跳转按钮,由MainActivity跳转到NextActivity:
1>NextActivity是Dialog。
由于NextActivity是Dialog,所以MainActivity依然可见,所以只调用了它的onPause()方法。
2>若将NextActivity改为不是Dialog(只需在Manifest.xml文件中删掉 android:theme="@android:style/Theme.Dialog"这一行即可)
对于MainActivity,由于不可见,状态由运行变为停止。
依次调用了它的回调方法:onPause()->onStop()
3.Activity处于运行状态时,点击返回按钮。
点击返回按钮,Activity由运行状态变为死亡状态,依次调用它的回调方法:onPause()->onStop()->onDestroy()
4.Activity处于运行状态,点击主页按钮,返回桌面。
Activity由运行状态变为停止状态,依次调用它的回调方法:onPause()->onStop()
5.Activity处于停止状态,即由桌面返回到Activity。
停止->运行,依次调用回调方法:onRestart()->onStart()->onResume()
6.Activity处于运行状态,旋转屏幕:
可以看出,旋转屏幕是一个销毁Activity然后重新创建Activity的过程。
运行->暂停->停止->死亡->运行
依次调用回调方法:onPause()->onStop->onDestroy()->onCreate()->onStart()->onResume()
7.Activity处于运行状态,手机此时锁屏。
可以看出,手机锁屏,此时由于Activity不可见,会进入停止状态。
依次调用回调方法:onPause()->onStop()
8.当应用正在运行时,手机锁屏,然后解锁回到应用界面。
可以看出应用从停止状态恢复到运行状态。
依次调用回调方法:onRestart()->onStart()->onResume()
以上是关于1.3Activity生命周期的主要内容,如果未能解决你的问题,请参考以下文章
使用 Fragment 和 Activity 执行生命周期流程的问题