本文将会从活动的生命周期、启动模式、Intent数据传输、最佳实践等多维度来讲解Activity,希望对你有用
生命周期
- 深入理解活动的生命周期,可以帮助我们更加流畅地编程,并在管理系统资源方面更加游刃有余
活动状态
每个活动在生命周期中最多有运行、暂停、停止、销毁四种状态
- 1)运行状态:当一个活动在返回栈的栈顶时,该活动就处于运行状态,如果回收处于运行状态的活动,会带来极差的用户体验
- 2)暂停状态:当活动不再处于栈顶,但
仍然可见时,则活动进入了暂停状态(并非每个活动都会占满屏幕);处于暂停状态的活动属于完全存活;只有在内存非常紧张的情况下,系统才会考虑回收该状态的活动 - 3)停止状态:当活动不再处于栈顶,且
完全不可见时,会进入停止状态;系统仍然会为该状态的活动保存相应的状态和成员变量;当其他地方需要内存时,系统可能会回收该状态的活动 - 4)销毁状态:当活动从返回栈中移除后就变成了销毁状态,系统会最为倾向于回收处于该状态的活动,以保证系统的内存充足
生存期 & 回调方法
Activity有如下7个回调函数,覆盖活动生命周期的每个环节:
- onCreate():
在活动第一次被创建时调用,用于完成活动的初始化操作,如:布局加载、绑定事件 - onStart():在活动由不可见变为可见时调用
- onResume():在活动准备好和用户交互时调用,
该活动会处于返回栈的栈顶,且活动处于运行状态 - onPause():
在系统准备去启动或恢复其他活动时调用,通常会在该方法中释放比较消耗CPU的资源,以及某些关键数据
- onStop():
在活动完全不可见时调用,和onPause()方法的主要区别在于:如果启动的新活动是对话框类的活动,onPause()方法会执行,而onStop()方法并不会执行 - onDestory():
在活动被销毁前调用,之后活动的状态将变为销毁状态,常用于完成内存释放等操作
- onRestart():在活动由停止变为运行状态前调用,即让活动重新启动
以上,除了onRestart(),其他方法都是两两相对的,所以,活动可分为三种生存期:
完整生存期:活动在onCreate()方法和onDestory()方法之间所经历的,即为完整的生存期可见生存期:活动在onStart()方法和onStop()方法之间所经历的,为可见生存期,即活动对用户总是可见的,即便可能无法和用户交互;可通过onStart()和onStop()方法来合理地管理对用户可见的资源,以保证处于停止状态的活动不会占用过多内存前台生存期:活动在onResume()方法和onPause()方法之间所经历的,即为前台生存期 =》活动总是处于运行状态,活动可以和用户交互
代码验证
- 在LifecycleActivity、NormalActivity的生命周期的回调方法中输出日志以便于查看:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.example.myapplication1.R;
public class LifecycleActivity extends AppCompatActivity {
public static final String TAG = "LifecycleActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycle);
Log.d(TAG, "--- onCreate ---");
Button startNormalBtn = (Button) findViewById(R.id.start_normal_btn);
startNormalBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(LifecycleActivity.this, NormalActivity.class));
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "--- onStart ---");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "--- onResume ---");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "--- onPause ---");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "--- onStop ---");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "--- onDestroy ---");
}
@Override
public void onRestart() {
super.onRestart();
Log.d(TAG, "--- onRestart ---");
}
}
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.example.myapplication1.R;
public class NormalActivity extends AppCompatActivity {
public static final String TAG = "NormalActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_normal);
Log.d(TAG, "--- onCreate ---");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "--- onStart ---");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "--- onResume ---");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "--- onPause ---");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "--- onStop ---");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "--- onDestroy ---");
}
@Override
public void onRestart() {
super.onRestart();
Log.d(TAG, "--- on

最低0.47元/天 解锁文章
1355

被折叠的 条评论
为什么被折叠?



