当前位置: 首页 > news >正文

Activity的生命周期

一、知识点

activity各个生命周期中各个函数常见的一些操作

1、onCreate() 初始化的操作  (设置布局    控件的初始化  )
2、onStart() //注册一些监听  (内容观察者)
3、onResume() 再次对数据进行查询
4、onPause() //数据的临时保存
5、onStop() //取消监听   
6、onDestroy() //对资源进行回收 (cursor关闭  bitmap  进行回收)

这里还有两个方法是需要注意一下的:

7、onSaveInstanceState():在onResume()之后调用

8、onRestoreInstanceState(Bundle savedInstanceState) :在onResume()之前调用

9、onConfigurationChanged(Configuration newConfig) :当横竖屏切换的时候被调用






横竖屏切换的时候:
竖屏到横屏:activity首先被销毁,在创建一个新的activity
横屏到竖屏:activity首先被销毁,再创建一个新的activity,再把该activity销毁,再创建一个新的activity.(是由于输入法的影响)



7、 <activity
            android:label="绗竴涓猘ctivity"
            android:name=".MainActivity" 
            android:configChanges="orientation|keyboardHidden">


configChanges="orientation|keyboardHidden: 横竖屏切换的时候不会创建新的Activity
android:configChanges="orientation" : 横竖屏切换时都只创建和销毁一个activity。(默认是竖屏---》横屏:销毁一个,创建一个。横屏到竖屏:销毁一个,创建一个,销毁一个,创建一个。因为受到输入法的影响)


Activity的作用:
起显示作用,他是用来和用户交互的。也是一个view的容器


1 完整的生命周期:
 onCreate() --> onStart() --> onResume()   activiyt已经正常显示
 点击回退键
 onPause() --> onStop() --> onDetroy()


2 可视的生命周期
 onCreate() --> onStart() --> onResume()   activiyt已经正常显示
 打开一个activity。该activity完全覆盖上一个activity
 onPause() ---> onStop()
 点击回退键
 onRestart()  -->  onStart() ---> onResume()
 点击回退键
onPause() --> onStop() --> onDetroy()


3 android:theme="@android:style/Theme.Dialog"
  就可以把activity变成对话框的效果
 onCreate() --> onStart() --> onResume()   activiyt已经正常显示
 打开一个activity。该activity没有完全覆盖上一个activity
 onPause()
 点击回退键
 onResume()



二、生命周期图




3、示例代码

public class MainActivity extends Activity {
	
	private Bitmap bitmap = null;
    private static final String TAG = "MainActivity";

    // 初始化的操作  (设置布局    控件的初始化  )
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Log.i(TAG, "  onCreate   ");
        if(savedInstanceState != null){
        	int page = savedInstanceState.getInt("page");
        	
        	Log.i(TAG, " onCreate  page " + page);
        }

    }
    
    //注册一些监听  (内容观察者)
    @Override
    protected void onStart() {
    	// TODO Auto-generated method stub
    	super.onStart();
    	Log.i(TAG, "  onStart   ");
    }
    
    @Override
    protected void onRestart() {
    	// TODO Auto-generated method stub
    	super.onRestart();
    	Log.i(TAG, "  onRestart   ");
    }
    
    //再次对数据进行查询
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	super.onResume();
    	Log.i(TAG, "  onResume   ");
    }
    
    //数据的临时保存
    @Override
    protected void onPause() {
    	// TODO Auto-generated method stub
    	super.onPause();
    	Log.i(TAG, "  onPause   ");
    }
    
    //取消监听   
    @Override
    protected void onStop() {
    	// TODO Auto-generated method stub
    	super.onStop();
    	Log.i(TAG, "  onStop   ");
    }
    
    //对资源进行回收 (cursor关闭  bitmap  进行回收)
    @Override
    protected void onDestroy() {
    	// TODO Auto-generated method stub
    	super.onDestroy();
    	Log.i(TAG, "  onDestroy   ");
    	
    	//cursor.close();
    	//bitmap.recycle();
    }
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
    	// TODO Auto-generated method stub
    	super.onSaveInstanceState(outState);
    	outState.putInt("page", 50);
    	
    	Log.i(TAG, " onSaveInstanceState ");
    }
    
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
    	// TODO Auto-generated method stub
    	super.onRestoreInstanceState(savedInstanceState);
    	int page = savedInstanceState.getInt("page");
    	
    	Log.i(TAG, " onRestoreInstanceState  page " + page);
    }
    
    //当横竖屏切换的时候被调用
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
    	// TODO Auto-generated method stub
    	super.onConfigurationChanged(newConfig);
    	
    	if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
    		Log.i(TAG, "   现在是横屏");
    	}else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
    		Log.i(TAG, "   现在是竖屏");
    	}
    }
    
    
    public void open(View v){
    	Intent intent = new Intent(this,Main2Activity.class);
    	startActivity(intent);
    }
    
    
    
}


(1)oncreate、onstart、onresume、onstop、ondestroy

(2)全部执行的顺序:创建一个activity然后执行,按返回键执行整个顺序;

(3)一般的执行要,全部流程如下:

(4)onCreate方法没有执行完,界面就不会被看到,创建对象

(5)onStart在界面显示的时候才会调用,还不可以和界面进行交互,无法获取焦点

(6)onResume在这个时候,界面还可以真正的进行交互的时候,获取焦点

(7)onPause界面失去交互                   

(8)onStop界面消失,看不见界面

(9)onDestroy的作用:销毁界面

总结的一些常见的生命周期:

当创建一个界面开始运行之后,然后点击home键,运行的流程:Oncreate—onStart---onResume---onPause---onResume---onStop,Activity并没有销毁,然后重新开始的时候,会进行onStop ---onRestart---onStart---onResume

                

当创建一个界面开始运行之后,然后点击back键,运行的流程:Oncreate—onStart---onResume---onPause--onStop--onDestroy ,当activity重新打开的时候 重新从onCreate执行

 

当创建一个界面开始运行之后,然后手机熄屏,运行的流程:Oncreate—onStart---onResume---onPause ---onStop,当activity重新打开的时候onStop--onRestart---onStart---onResume

 

当创建一个界面开始运行之后,然后手机弹出来一个对话框(失去交互),运行的流程:Oncreate—onStart---onResume---onPause,当activity重新打开的时候onPause--onResume

 


相关文章:

  • javascript实现URL不缓存的方法
  • Android Studio VS Eclipse (还在用Eclipse?你OUT了!)
  • Android之TextView灵活使用
  • Android Studio安装后Fetching android sdk component information超时的解决方案
  • Git配置出现的问题
  • Android-studio+Genymotion模拟器的联合使用
  • 工作中遇到的一个多线程下导致RCW无法释放的问题
  • Android实例-拨打电话
  • 博弈SG函数
  • Android实例-发送信息
  • 利用jQuery实现鼠标滑过整行变色
  • Android项目之无线点餐(1)--点餐系统数据库设计
  • HDU 4757 Tree 可持久化字典树
  • Android项目之无线点餐(2)--用户登录的客户端和服务器端实现
  • 千变万化的ViewPager切换动画(1)--仅支持3.0以上版本的官方方法
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【5+】跨webview多页面 触发事件(二)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • co模块的前端实现
  • js 实现textarea输入字数提示
  • js操作时间(持续更新)
  • node学习系列之简单文件上传
  • PHP的类修饰符与访问修饰符
  • webpack入门学习手记(二)
  • 订阅Forge Viewer所有的事件
  • 基于HAProxy的高性能缓存服务器nuster
  •  一套莫尔斯电报听写、翻译系统
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​如何防止网络攻击?
  • ​用户画像从0到100的构建思路
  • #13 yum、编译安装与sed命令的使用
  • (145)光线追踪距离场柔和阴影
  • (3)选择元素——(17)练习(Exercises)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (二开)Flink 修改源码拓展 SQL 语法
  • (十六)一篇文章学会Java的常用API
  • (转)关于pipe()的详细解析
  • (转)平衡树
  • *** 2003
  • .gitignore文件—git忽略文件
  • .mysql secret在哪_MySQL如何使用索引
  • .NET CF命令行调试器MDbg入门(一)
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net Stream篇(六)
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net程序集学习心得
  • .net访问oracle数据库性能问题
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • [ARC066F]Contest with Drinks Hard
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具