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();}}




原创粉丝点击