Android 之 Activity 的生命周期(PS:文章多图,流量警告)

前言:

        本篇文章纯粹个人见解,如有错误或不到位的地方,请指出,多谢!

一般都会直接上官方生命周期图,我就不,皮一下好开心。

我先上我的效果图:



从我的效果图看出,一般的打开关闭操作。我也在每个生命周期写了一个Toast。

在我打开app的时候,依次弹出

onCreate()方法里!!

onStart()方法里!!

onResume()方法里!!


在我点击返回键,关闭app的时候,依次弹出

onPause()方法里!!

onStop()方法里!!

onDestory()方法里!!


看英文也好明显,生命周期就是 

创建→开始→恢复→暂停→停止→销毁


好吧,现在再看看官方的生命周期图



对吧,一模一样。到了onResume就可以对app进行交互操作。

然后再看一张简单点的图:



那么有朋友会问,我不点返回键,我点home键或者菜单键会到生命哪个周期呢?

来,给你效果图看看:

home键的效果:

   

菜单键的效果:



从效果图可以看出,点击home键和菜单键会弹出

onPause()方法里!!

onStop()方法里。


然后再点回app会弹出

onRestart()方法里!!

onStart()方法里!!

onResume()方法里!!


就是说,app在栈顶的时候按Home键和菜单键

就会到生命的 onPause()和onStop()周期里。

然后重回栈顶的时候,

就会到生命的onRestart(),onStart()和onResume()周期里。


那么,这个离开栈顶的时候,用户暂时不用我们的app,

我们就应该在onStop()方法里,暂时释放一些资源(例如注销广播)。

不然,app拿这那么多内存又不用会让手机很卡的。


那么, 那我弹个提示框或者跳到其他Activity生命周期又会怎样呢?

我可以用效果图来回到你的问题。

来,效果图:



从效果图可以看出,弹出AlertDialog的时候,没有弹出提示!

但是,当我点击一个Dialog Activity的时候就弹出提示

onPause()方法里!!

然后再点击空白处回到MainActivity的时候

onResume方法里!!


同样是将MainActivity变成一种"不完全可见"的状态

弹出AlertDialog时,生命周期并没有变化!!

弹出Dialog Activity时,生命周期走到了onPause()。


顺带一提,这个Dialog Activity首先从继承 AppCompatActivity 变成 Activity

然后在manifests.xml添加android:theme="@android:style/Theme.Dialog"


如果是弹出一个普通的Activity生命周期会是 onPause() → onStop()

最后看看我的代码吧...

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity2";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toast.makeText(this,"在onCreate()方法里!!",Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onCreate: ");
        Log.d(TAG, "-----------------------");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Toast.makeText(this,"在onStart()方法里!!",Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onStart: ");
        Log.d(TAG, "-----------------------");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(this,"onResume()方法里!!",Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onResume: ");
        Log.d(TAG, "-----------------------");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Toast.makeText(this,"onPause()方法里!!",Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onPause: ");
        Log.d(TAG, "-----------------------");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Toast.makeText(this,"onStop()方法里!!",Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onStop: ");
        Log.d(TAG, "-----------------------");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Toast.makeText(this,"onRestart()方法里!!",Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onRestart: ");
        Log.d(TAG, "-----------------------");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Toast.makeText(this,"onDestroy()方法里!!",Toast.LENGTH_SHORT).show();
        Log.d(TAG, "onDestroy: ");
        Log.d(TAG, "-----------------------");
    }

    public void myAlertDialog(View view){
        new AlertDialog.Builder(this)
                .setTitle("测试Dialog")
                .setMessage("测试中...")
                .show();
    }

    public void myDialogActivity(View view){
        Intent i = new Intent(this, Main2Activity.class);
        startActivity(i);
    }
}

最后的最后,我发现一个问题!

先上效果图:

                            问题版本:

                            正常版本:



对比两个效果图,可以发现在onStop()提示消失前销毁app,会弹出onDestory()方法里的提示。

但是,在onStop()方法里!! 提示消失后,再销毁app,就不会弹出onDestory()方法里!! 的提示!!!

是不是说,已经app离开久了,这样强制销毁,app是不会走到 onDestory()的生命周期?

大神们,如果你们还在看的话,帮帮我解答这个问题。谢谢。


Thanks:

以上部分内容摘取自以下网址:

 Activity生命周期中我们可以做些什么?

深入理解Activity的生命周期


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值