android activity各种生命周期演示
来源:互联网 发布:新速特软件站不能下载 编辑:程序博客网 时间:2024/06/05 16:50
前言:做android开发也有三年了,前几天遇到一个bug。就是两个比较复杂的activity频繁来回切换,出现应用程序无响应了。这种测试类似于压力测试。毕竟出现了问题,还是挺尴尬的。最终发现的原因是finish之后,onDestroy里面有些释放资源的代码没有执行,又重新进入。后面了解了之后,就把比较重要释放资源放在finish那里先执行,就没出现应用程序无响应。后面有时间,又立马写demo测试activity各种的生命周期。
本文的源码下载:http://download.csdn.net/download/qq_16064871/9989161
关于屏幕旋转的可参考:Android 屏幕旋转生命周期以及处理方法
1、启动activity流程
2、返回键
点击返回键和手动调用finish的生命周期是一样的。
3、屏幕旋转
这个是生命周期重新绘制的。需要保存数据放这个函数onSaveInstanceState
然后拿出来是这个函数onRestoreInstanceState
4、点击home键
5、唤醒程序
6、切换activity
7、activity返回到上一个activity
从这图上可以看出onDestroy是在后面才释放资源的。
8、旋转屏幕生命周期不重写
需要在AndroidManifest.xml添加 android:configChanges="keyboardHidden|orientation|screenSize"
<activity android:name="com.example.activitytest.TestActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/app_name" > </activity>
在activity里面重写onConfigurationChanged也可以,没有什么需求操作就不重写了。
9、注意
Activity.finish()
Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会找到这个Activity。
System.exit(0)
这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。
使用时,可以写在onDestory()方法内,亦可直接在想退出的地方直接调用:
如:System.exit(0); 或 android.os.Process.killProcess(android.os.Process.myPid());
10、测试代码
package com.example.activitytest;import android.app.Activity;import android.content.Intent;import android.content.res.Configuration;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener{private final String TAG = "Show";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i(TAG, "MainActivity onCreate");findViewById(R.id.button1).setOnClickListener(this);findViewById(R.id.button2).setOnClickListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_settings) {return true;}else if (id == android.R.id.home) {}return super.onOptionsItemSelected(item);}@Overridepublic void finish() {// TODO Auto-generated method stubLog.i(TAG, "MainActivity finish");super.finish();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onDestroy");super.onDestroy();}@Overrideprotected void onPause() {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onPause");super.onPause();}@Overrideprotected void onRestart() {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onRestart");super.onRestart();}@Overrideprotected void onStart() {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onStart");super.onStart();}@Overrideprotected void onResume() {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onResume");super.onResume();}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onConfigurationChanged");super.onConfigurationChanged(newConfig);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onRestoreInstanceState");super.onRestoreInstanceState(savedInstanceState);}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onSaveInstanceState");super.onSaveInstanceState(outState);}@Overrideprotected void onStop() {// TODO Auto-generated method stubLog.i(TAG, "MainActivity onStop");super.onStop();}@Overridepublic void onClick(View arg0) {switch (arg0.getId()) {case R.id.button1:finish();break;case R.id.button2:startActivity(new Intent(this, TestActivity.class));break;default:break;}}}
package com.example.activitytest;import android.app.Activity;import android.content.res.Configuration;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;public class TestActivity extends Activity{private final String TAG = "Show";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);Log.i(TAG, "TestActivity onCreate");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_settings) {return true;}else if (id == android.R.id.home) {}return super.onOptionsItemSelected(item);}@Overridepublic void finish() {// TODO Auto-generated method stubLog.i(TAG, "TestActivity finish");super.finish();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onDestroy");super.onDestroy();}@Overrideprotected void onPause() {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onPause");super.onPause();}@Overrideprotected void onRestart() {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onRestart");super.onRestart();}@Overrideprotected void onStart() {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onStart");super.onStart();}@Overrideprotected void onResume() {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onResume");super.onResume();}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onConfigurationChanged");super.onConfigurationChanged(newConfig);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onRestoreInstanceState");super.onRestoreInstanceState(savedInstanceState);}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onSaveInstanceState");super.onSaveInstanceState(outState);}@Overrideprotected void onStop() {// TODO Auto-generated method stubLog.i(TAG, "TestActivity onStop");super.onStop();}}
- android activity各种生命周期演示
- Android项目(三)-- Activity生命周期演示
- Android Activity生命周期演示程序的例子
- Activity生命周期演示
- activity 生命周期演示
- activity 生命周期演示
- 演示Activity的生命周期
- 【代码】利用Android的Log 演示一个activity的生命周期
- 利用Android的Log 演示一个activity的生命周期
- android生命周期演示
- 【Android】【Activity生命周期】Activity生命周期
- 基于Log演示一个activity生命周期
- Android 横竖屏切换的Activity生命周期演示-面试常问题
- Android— Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
- Android 各种生命周期
- Android activity的生命周期
- Android Activity 生命周期
- Android:Activity的生命周期
- 新版本FastJsonHttpMessageConverter初始化,默认设置MediaType为*/*
- Spring Security和Shiro的比较和使用
- FreeMark自动生成代码
- js实现 全选/反选 和 单选
- java表达式类型的自动提升
- android activity各种生命周期演示
- Android Studio插件整理
- 解决start tomcat has encountered a problem出错的方法
- WebSerice学习笔记——WebSerice基础
- struts2 2.5.10.1升级至2.5.13
- Eclipse中无法输入中文
- JMeter学习---关联
- Hadoop-Hive-1
- python学习路线图