设为首页 加入收藏

TOP

粮草先行——Android折叠屏开发技术点(一)(一)
2019-09-01 23:25:38 】 浏览:55
Tags:粮草先行 Android 折叠 开发技术

最近有关折叠屏产品的新闻层出不穷,各家手机厂商也分别慢慢地亮出了自家的产品。然而市场上的一些APP仍然没有很好地适配这样的设备,显示不正常和应用重启的状况时有发生。因此,我会用接下来的几篇文章来点出有关折叠屏开发中的一些需要注意的地方。
今天我们先来说一下生命周期,这是广大开发者特别需要注意的一点。
首先我们来看一下测试代码:

public class MainActivity extends AppCompatActivity {

    private final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG, "onSaveInstanceState");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d(TAG, "onRestoreInstanceState");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "onConfigurationChanged");
    }

}

我在每一个生命周期和恢复现场的回调方法中都加了Logcat输出,我们来看一下切换屏幕时APP的具体表现。

2019-01-30 11:19:00.216 30205-30205/com.example.helloworld D/MainActivity: onPause
2019-01-30 11:19:00.221 30205-30205/com.example.helloworld D/MainActivity: onSaveInstanceState
2019-01-30 11:19:00.227 30205-30205/com.example.helloworld D/MainActivity: onStop
2019-01-30 11:19:00.228 30205-30205/com.example.helloworld D/MainActivity: onDestroy
2019-01-30 11:19:00.325 30205-30205/com.example.helloworld D/MainActivity: onCreate
2019-01-30 11:19:00.326 30205-30205/com.example.helloworld D/MainActivity: hashcode is 89642980
2019-01-30 11:19:00.327 30205-30205/com.example.helloworld D/MainActivity: onStart
2019-01-30 11:19:00.328 30205-30205/com.example.helloworld D/MainActivity: onRestoreInstanceState
2019-01-30 11:19:00.331 30205-30205/com.example.helloworld D/MainActivity: onResume

我们可以看到,默认情形下,Activity在屏幕尺寸发生改变的时候也随之重启了。 和改变屏幕Orientation的行为有几分相像。
此时我们面临两个选择:

  1. 重启APP以适应屏幕改变;
  2. 手动处理数据,避免APP重启。

对于第一种情况,我们一般在回调onSaveInstanceState()方法中保存数据,并在onCreate()或onRestoreInstanceState()回调方法中取回保存的数据用于恢复现场。
然而,并非在所有情况下都需要完整地重启APP来适应屏幕改变,和改变屏幕方向一样,我们只需要在Androidmanifest.xml中相应的Activity声明中加入相应的属性值即可。此处,需要添加:

android:configChanges="screenSize|smallestScreenSize|screenLayout"

添加好之后再次运行APP并反复改变屏幕大小,此时的生命周期回调顺序变为:

2019-01-30 11:13:02.217 29276-29276/com.example.helloworld D/MainActivity: onCreate
2019-01-30 11:13:02.219 29276-29276/com.example.helloworld D/MainActivity: onStart
2019-01-30 11:13:02.223 29276-29276/com.example.helloworld D/MainActivity: onResume
2019-01-30 11:13:05.289 29276-29276/com.example.helloworld D/MainActivity: onConfigurationChanged

可见,此时A

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇取之有道——巧用Root权限 启动其.. 下一篇提升应用崩溃时的用户体验——去..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目