您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
55_切换屏幕activity生命周期的处理
发布时间:2021-03-03 15:53:55编辑:雪饮阅读()
切换横竖屏
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切换横竖屏"
android:onClick="click"
/>
</LinearLayout>
则当再次进行横竖屏切换的时候就没有activity生命周期发生变化的问题了package com.example.lifecycle;
import androidx.appcompat.app.AppCompatActivity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
public void click(View view){
/*
*系统中定义: int ORIENTATION_PORTRAIT = 1; 竖屏
*系统中定义: int ORIENTATION_LANDSCAPE = 2; 横屏
*/
int screenNum = getResources().getConfiguration().orientation;
if(screenNum==1){
//切换为横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
if(screenNum==2){
//切换为竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
}
/**
* 用户可见的时候 调用onstart();
*/
@Override
protected void onStart() {
super.onStart();
System.out.println("onStart");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("onRestart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("onResume");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("onStop");
}
/**
* activity 被销毁的时候 执行的方法
*/
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestroy");
}
}横竖屏切换对生命周期的影响
完成了横竖屏切换功能,部署到设备中进行横竖屏切换操作
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.lifecycle">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Lifecycle">
<activity android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:theme="@style/Theme.AppCompat.Dialog"
android:name=".MainActivity2"></activity>
</application>
</manifest>
所以这里对上面清单文件中加的这条属性就要先移除了,移除这条属性后。则在MainActivity.java中实现数据状态的捕获保存与读取恢复如:
package com.example.lifecycle;
import androidx.appcompat.app.AppCompatActivity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
public void click(View view){
/*
*系统中定义: int ORIENTATION_PORTRAIT = 1; 竖屏
*系统中定义: int ORIENTATION_LANDSCAPE = 2; 横屏
*/
int screenNum = getResources().getConfiguration().orientation;
if(screenNum==1){
//切换为横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
if(screenNum==2){
//切换为竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
int page = 0;
//pdf 阅读器 当前用户读到了第30页
if(savedInstanceState!=null){
page = savedInstanceState.getInt("page");
System.out.println("定位到 第 "+ page+"页");
}
}
/**
* 在activity被异常 回收的时候 会被执行
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("page", 30);
}
/**
* 用户可见的时候 调用onstart();
*/
@Override
protected void onStart() {
super.onStart();
System.out.println("onStart");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("onRestart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("onResume");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("onStop");
}
/**
* activity 被销毁的时候 执行的方法
*/
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestroy");
}
}然后部署到设备中进行测试,是没有问题的
可以成功保存状态与读取已保存的状态了。
关键字词:activity,android,生命周期,切换屏幕
下一篇:56_activity的启动模式