AlertDialog,Toast对Activity生命周期的影响

Posted Cloud_Castle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AlertDialog,Toast对Activity生命周期的影响相关的知识,希望对你有一定的参考价值。

转自:http://blog.csdn.net/scorpioneal/article/details/19049475


经常可以在网上看到一些文章介绍Activity生命周期, 说只要一个Activity被覆盖,不是完全可见, 那么它就处于onPause状态或者不可见, 则处于onStop状态, 之前自己也是一直这样以为, 知道后来碰到一些情况(toast的弹出, AlertDialog的弹出等) 才发现并不是这样。

     很简单的做个试验: 点击按钮弹出一个AlertDialog, 这时, 后面的Activity处于不完全可见的状态, 打印出Activity生命周期的变化。

     

[java]  view plain  copy  
  1. package com.example.myandroiddemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.AlertDialog;  
  5. import android.content.Context;  
  6. import android.os.Bundle;  
  7. import android.util.AttributeSet;  
  8. import android.util.Log;  
  9. import android.view.LayoutInflater;  
  10. import android.view.View;  
  11. import android.widget.Button;  
  12. import android.widget.LinearLayout;  
  13. import android.widget.RelativeLayout;  
  14.   
  15. public class MainActivity extends Activity   
  16.   
  17.     private static final String TAG = MainActivity.class.getSimpleName();  
  18.     private Context mContext = MainActivity.this;  
  19.     private Button mButton;  
  20.   
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState)   
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity_main);  
  25.         Log.d(TAG, "onCreate");  
  26.   
  27.         mButton = (Button) findViewById(R.id.clickme);  
  28.         mButton.setOnClickListener(new View.OnClickListener()   
  29.   
  30.             @Override  
  31.             public void onClick(View v)   
  32.                 AlertDialog.Builder builder = new AlertDialog.Builder(mContext);  
  33.                 builder.setTitle("This is a sample");  
  34.                 builder.create();  
  35.                 builder.show();  
  36.               
  37.         );  
  38.       
  39.   
  40.     @Override  
  41.     protected void onDestroy()   
  42.         super.onDestroy();  
  43.         Log.d(TAG, "onDestroy");  
  44.       
  45.   
  46.     @Override  
  47.     protected void onPause()   
  48.         super.onPause();  
  49.         Log.d(TAG, "onPause");  
  50.       
  51.   
  52.     @Override  
  53.     protected void onRestart()   
  54.         super.onRestart();  
  55.         Log.d(TAG, "onRestart");  
  56.       
  57.   
  58.     @Override  
  59.     protected void onResume()   
  60.         super.onResume();  
  61.         Log.d(TAG, "onResume");  
  62.       
  63.   
  64.     @Override  
  65.     protected void onStart()   
  66.         super.onStart();  
  67.         Log.d(TAG, "onStart");  
  68.       
  69.   
  70.     @Override  
  71.     protected void onStop()   
  72.         super.onStop();  
  73.         Log.d(TAG, "onStop");  
  74.       
  75.       
  76.   

这时我们发现在打印完onCreate() onStart() onResume()之后 点击按钮弹出对话框, 这时并没有其他log打印, 界面显示如下


这表明弹出的东西对后面Activity的生命周期并没有影响, 有人可能会觉得是因为弹出的东西太小了。 我们修改代码如下:

[java]  view plain  copy  
  1. package com.example.myandroiddemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.AlertDialog;  
  5. import android.content.Context;  
  6. import android.os.Bundle;  
  7. import android.util.AttributeSet;  
  8. import android.util.Log;  
  9. import android.view.LayoutInflater;  
  10. import android.view.View;  
  11. import android.widget.Button;  
  12. import android.widget.LinearLayout;  
  13. import android.widget.RelativeLayout;  
  14.   
  15. public class MainActivity extends Activity   
  16.   
  17.     private static 弹框(AlertDialog)和提示信息Toast字体大小颜色设置

    Android实现点击AlertDialog上按钮时不关闭对话框

    Handler中不能操作Toast的解决方案

    当我单击警报对话框中列出的项目时,Android Toast 没有出现

    跟我学Android之十 对话框

    跟我学Android之十 对话框