以前开发时,一直没有留意activity如果主题背景透明,对生命周期有什么影响呢?
测试方式:编写demo
配置文件(AndroidManifest)中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lcl.view">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
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=".Sec"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
</manifest>
MainActivity中
package com.lcl.view;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("MM", "onCreate");
// Activity正在被创建;可以做初始化操作 。比如调用setContentView加载界面布局资源,
// 初始化Activity所需数据
}
@Override
protected void onRestart() {
super.onRestart();
Log.i("MM", "onRestart");
//Activity重新启动,Activity从不可见到可见,onRestart会被调用
}
@Override
protected void onStart() {
super.onStart();
Log.i("MM", "onStart");
//Activity正在被启动;此时,Activity可见,但是还没有出现在前台,无法和用户交互,可理解为用户不可见
}
@Override
protected void onResume() {
super.onResume();
Log.i("MM", "onResume");
//Activity已经可见,并且出现在前台并开始活动;与onStart()方法都表示Activity已经可见,
// 区别是onStart()是后台可见,onResume()是前台可见
}
@Override
protected void onPause() {
super.onPause();
Log.i("MM", "onPause");
//表示Activity正在停止,正常情况下,紧接着onStop会被执行
}
@Override
protected void onStop() {
super.onStop();
Log.i("MM", "onStop");
//Activity即将停止,可以做一些回收但不太耗时操作
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("MM", "onDestroy");
//表示Activity即将被销毁,此时可以做一些回收和资源释放操作
}
public void onClick(View view){
Intent i = new Intent(MainActivity.this,Sec.class);
startActivity(i);
}
}
Sec中
package com.lcl.view;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
/**
* Created by liuchunliang on 2017/2/21.
*/
public class Sec extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sec);
Log.i("MM", "Sec onCreate");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i("MM", "Sec onRestart");
//Activity重新启动,Activity从不可见到可见,onRestart会被调用
}
@Override
protected void onStart() {
super.onStart();
Log.i("MM", "Sec onStart");
//Activity正在被启动;此时,Activity可见,但是还没有出现在前台,无法和用户交互,可理解为用户不可见
}
@Override
protected void onResume() {
super.onResume();
Log.i("MM", "Sec onResume");
//Activity已经可见,并且出现在前台并开始活动;与onStart()方法都表示Activity已经可见,
// 区别是onStart()是后台可见,onResume()是前台可见
}
@Override
protected void onPause() {
super.onPause();
Log.i("MM", "Sec onPause");
//表示Activity正在停止,正常情况下,紧接着onStop会被执行
}
@Override
protected void onStop() {
super.onStop();
Log.i("MM", "Sec onStop");
//Activity即将停止,可以做一些回收但不太耗时操作
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("MM", "Sec onDestroy");
//表示Activity即将被销毁,此时可以做一些回收和资源释放操作
}
}
开始运行程序 执行周期:
点击跳转 执行周期:
按下返回键 执行周期:
我们来分析一下:
首先是MainActivity从创建->启动->到用户可见,
然后点击跳转时MainActivity先暂停然后停止,但是呢因为是透明主题,所以用户可见,没有执行onStop()方法,Sec 中onCreate()创建,然后启动,最后呈现给用户,
当我们按下返回键时,Sec 先执行onPause()还是因为采用透明主题,所以没有执行onStop(),MainActivity中,没有执行onRestart() onStart()而是执行了onResume,因为MainActivity已经创建,只是由用户不可见到用户可见,所以只执行了onResume(),然后Sec 继续执行onStop()和onDestroy().
实践出真知,大家也多动手实验一下吧。