小编Eli*_*eth的帖子

片段状态损失?

究竟什么是"国家损失"情况?你能展示一个完整的场景(包括一些代码)会导致它吗?我已经阅读了很多教程(官方和非官方),博客,有关该主题的stackoverflow问题/答案,但从来没有这样的例子会导致实际的状态损失以及状态丢失发生后的实际情况.

我不知道为了造成国家损失所做的全部步骤.我试图做的是:

  1. 具有包含框架布局的布局的Activity.
  2. 一个片段,在一些TextView中有一个带有'hello'文本的布局.
  3. Fragment与片段事务一起添加到上面的帧布局中.
  4. 用户按下主页按钮,然后发生使用commitAllowingStateLoss()方法提交的片段事务的方案.

然后我尝试进行配置更改,但一切都很好.然后我试图从后台恢复,但一切都很好.然后我试图一个片段添加到背堆栈并执行commitAllowingStateLoss(),然后将上述步骤,但配置改变发生时或当我从背景回来,然后我按下了哪个做删除事务的返回按钮意味着从后堆栈中移除片段,这意味着不会发生状态丢失.

那究竟是什么'国家损失'?它如何影响用户在屏幕上看到的内容.你能展示一个完整的州损失情景吗?

编辑:放一些测试代码:

活动代码:

package com.example.statelosstest;

import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.os.Handler;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
}

@Override
protected void onStop() {
    super.onStop();

    //Just for test
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            addDummyFragment();             
        }
    }, 5000);
}

/**
 * Invoke this method after onSaveInstanceState has been called,
 * for example after user press android home …
Run Code Online (Sandbox Code Playgroud)

android android-fragments

7
推荐指数
1
解决办法
2067
查看次数

模拟 Activity/Fragment 重新创建

我正在尝试模拟ActivityFragment重新创建,并且还检查onSaveInstancestate()并且onRestoreInstanceState()通常检查我是否在所有情况下都以良好的方式处理活动重新创建,例如,就像屏幕旋转导致活动重新创建它时一样自己。

\n\n

但就我而言,我想检查更多可能导致重新创建的选项/案例,因为我的应用程序无法旋转(所有活动均为纵向)。

\n\n

我看到了很多关于这个主题的文章、博客和 stackoverflow 问题/答案,例如这里、 这里这里。

\n\n

正如这个 stackoverflow 答案所说,为什么不总是使用 android:configChanges="keyboardHidden|orientation" ?\n 还有更多的事件可能会导致活动重新创建,因此在我读完它之后,我想测试我的应用程序中的一些事件。

\n\n

例如,我在活动中按下主页按钮,然后进入设置并尝试更改语言、更改字体大小等...,但这些操作都没有使我的应用程序按照我的预期重新创建。\ n当我返回我的应用程序时,它只是恢复并onCreate()从未调用。\n所以我什至检查了有关此的官方文档。他们还说这应该导致我的活动重新创建:引用:

\n\n
"When a configuration change occurs at runtime, the activity is shut down and restarted by default" \n
Run Code Online (Sandbox Code Playgroud)\n\n

但正如我所说,这并没有发生在我身上。

\n\n

这对我来说很重要,因为我非常 na\xc3\xafve 并认为如果我的应用程序仅以纵向显示或者我是否将这一行添加到清单中:

\n\n
android:configChanges="keyboardHidden|orientation|screenSize"\n
Run Code Online (Sandbox Code Playgroud)\n\n

那么一切都会好起来的,显然不是因为有更多的配置更改可以重新启动我的活动,所以我不能再运行它,我想以良好的方式处理它,现在我也想测试它。

\n

android android-lifecycle android-fragments android-activity

3
推荐指数
1
解决办法
1560
查看次数