展会信息港展会大全

android activity的生命周期 以及横竖屏切换
来源:互联网   发布日期:2016-01-14 10:49:02   浏览:1304次  

导读:activityA和B A跳转到B1:在主配置文件中添加Bactivity,如果不想B在横竖屏切换的时候导致activity的销毁和重新创建;可在声明activity中添加android:...

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) {

// TODO Auto-generated method stub

super.onSaveInstanceState(outState);

outState.putInt("page", 30);

}

}

4:Bactivity代码

[java]

package com.example.lifecycle;

import android.app.Activity;

import android.os.Bundle;

public class DemoActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.demo);

System.out.println("demo onCreate");

}

@Override

public void finish() {

super.finish();

System.out.println("demo finish");

}

@Override

protected void onDestroy() {

super.onDestroy();

System.out.println("demo onDestroy");

}

@Override

protected void onPause() {

super.onPause();

System.out.println("demo onPause");

}

@Override

protected void onRestart() {

super.onRestart();

System.out.println("demo onRestart");

}

@Override

protected void onResume() {

super.onResume();

System.out.println("demo onResume");

}

@Override

protected void onStart() {

super.onStart();

System.out.println("demo onStart");

}

@Override

protected void onStop() {

super.onStop();

System.out.println("demo onStop");

}

}

注意onSaveInstanceState方法的作用,可以保存activity在因为异常导致销毁时候的数据,然后传给onCreate方法,在做处理,就可以避免数据的错乱,

例如 在看小数的时候切换了横竖屏,在切换的时候会调用onCreate onStart onResume 那么activity中的当前页数就丢了,用得从新开始,如果重写了onSaveInstanceState方法,把当前页放到参数bundle中,在onCreate的时候,onCreate中的参数bundle就是onSaveInstanceState方法放进的bundle

在声明的activity中添加android:configChanges="keyboardHidden|orientation" 属性 可以禁止activity在横竖屏的时候activity被重新创建或者重启,导致数据丢失,在游戏制作中尤为重要

赞助本站

人工智能实验室

相关热词: android开发 教程

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港