当前位置:操作系统 > 安卓/Android >>

android activity的生命周期 以及横竖屏切换

activityA和B A跳转到B

1:在主配置文件中添加Bactivity,如果不想B在横竖屏切换的时候导致activity的销毁和重新创建;可在声明activity中添加

android:configChanges="keyboardHidden|orientation"

[html] 
<!-- android:configChanges="keyboardHidden|orientation" 禁止activity在横竖屏的时候activity被重新创建或者重启,导致数据丢失,在游戏制作中尤为重要 --> 
       <activity 
           android:name=".DemoActivity" 
           android:configChanges="keyboardHidden|orientation" 
           android:theme="@android:style/Theme.Dialog" /> 
       <!-- android:theme="@android:style/Theme.Dialog" 设置该activity的显示样式是一对话框的形式显示 --> 

2:在A的配置文件中添加一个按钮.和单击事件

3:重写A中父类的onCreate onDestroy onPause onRestart onResume onStart onStop 方法,并添加system.out的TAG

为了避免横竖屏和以为一些异常导致activity的销毁和数据丢失,就重写onSaveInstanceState这个方法,该方法可以保存当前页面因为异常导致的activity销毁时候数据,然后在下载onCreate的时候调用这些数据就可以了,onCreate中的参数就是onSaveInstanceState方法的bundle对象

[java] 
package com.example.lifecycle; 
 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
 
/**
 * 声明周期: 一个对象被创建出来 到 被销毁(或者垃圾回收)的这个过程中所必须的方法
 * 
 * @author w
 * 
 */ 
public class MainActivity extends Activity { 
    /**
     * A 激活下一个activity之前的页面 B激活下一个activity之后的页面<br>
     * 程序第一次被部署的时候,执行第一个activity的onCreate onStart onResume 方法<br>
     * 激活下一个activity 执行A的onPause B onCreate onStart onResume A的 onStop<br>
     * 在B中点击返回按钮执行B的finidsh onPause A的 onRestart onStart onResume B的 onStop
     * onDestroy<br>
     * 在A中点击返回 执行 A的 finish onPause onStop onDestroy <br>
     * 在A中点击home键 执行A的onPause onStop方法<br>
     */ 
    @Override 
    /**
     * activity第一次被创建的时候执行,可做一些初始化工作
     */ 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        System.out.println("main onCreate"); 
        int page = 0; 
        if (savedInstanceState != null) {// savedInstanceState 
                                            // 接收因异常回收页面传来的bundle值 
            page = savedInstanceState.getInt("page");// 取得传来的bundle中的值 
        } 
        System.out.println("当前: " + page); 
    } 
 
    /**
     * click点击事件
     */ 
    public void click(View view) { 
        Intent intent = new Intent(this, DemoActivity.class); 
        startActivity(intent); 
    } 
 
    @Override 
    public void finish() { 
        super.finish(); 
        System.out.println("main finish"); 
    } 
 
    @Override 
    /**
     * activity被销毁的时候执行的方法
     */ 
    protected void onDestroy() { 
        super.onDestroy(); 
        System.out.println("main onDestroy"); 
    } 
 
    @Override 
    /**
     * 当界面失去焦点的时候
     */ 
    protected void onPause() { 
        super.onPause(); 
        System.out.println("main onPause"); 
    } 
 
    @Override 
    protected void onRestart() { 
        super.onRestart(); 
        System.out.println("main onRestart"); 
    } 
 
    @Override 
    /**
     * 界面的控件可以获取焦点的时候
     */ 
    protected void onResume() { 
        super.onResume(); 
        System.out.println("main onResume"); 
    } 
 
    @Override 
    /**
     * 当界面可以被用户可见,当用户再次返回该activity的时候,可以用这个方法来做一些数据的更新
     */ 
    protected void onStart() { 
        super.onStart(); 
        System.out.println("main onStart"); 
    } 
 
    @Override 
    /**
     * 界面用户完全不可见的时候调用,比如正在看视屏,来一电话,可以用该方法停止播放
     */ 
    protected void onStop() { 
        super.onStop(); 
        System.out.println("main onStop"); 
    } 
 
    @Override 
    /**
     * 当activity被异常销毁(回收)的时候调用,如果是自适应屏幕,
     * 如果是一个阅读器,在看的时候突然没电了,就会调用这个方法,当下次调用者个页面的时候,会调用onCreate方法,并把这个参数的bundle对象传给oncreate方法,<br>
     * oncreate方法中的bundle参数就是该值
     */ 
    protected void onSaveInstanceState(Bundle outState) {&nbs

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,