相关疑难解决方法(0)

如何使用保存实例状态保存Android Activity状态?

我一直在研究Android SDK平台,有点不清楚如何保存应用程序的状态.因此,考虑到'Hello,Android'示例的这种小型重新设计:

package com.android.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {

  private TextView mTextView = null;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mTextView = new TextView(this);

    if (savedInstanceState == null) {
       mTextView.setText("Welcome to HelloAndroid!");
    } else {
       mTextView.setText("Welcome back.");
    }

    setContentView(mTextView);
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为这对于最简单的情况就足够了,但无论我如何远离应用程序,它总是以第一条消息响应.

我确信解决方案就像覆盖onPause或类似的那样简单,但我已经在文档中捅了大约30分钟左右,并且没有找到任何明显的东西.

android application-state android-activity

2538
推荐指数
26
解决办法
74万
查看次数

首先或最后调用super.onSaveInstanceState(bundle)?

哪个更正确?这个:

@Override protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putLong(ID, mId);
}
Run Code Online (Sandbox Code Playgroud)

或这个:

@Override protected void onSaveInstanceState(Bundle outState) {
    outState.putLong(ID, mId);
    super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)

他们都在我的姜饼设备和Froyo和冰淇淋三明治模拟器上为我工作,我已经看到尽可能多的例子说另一种方式.有关系吗?

android

39
推荐指数
1
解决办法
3792
查看次数

屏幕旋转后不会调用onSaveInstanceState

我知道有许多问题在关于保存事件状态,但我无法找到问题的答案.

我有一个扩展AppCompatActivity的活动; 此活动使用3个片段,它有一个变量'int currentStep'来跟踪正在显示的片段.在onSavedInstanceState方法中,我将currentStep变量存储在bundle中,然后在onCreate方法中我将其恢复.

public class MainActivity extends AppCompatActivity {
    private final String CURRENT_STEP_TAG = "current_step";
    private int currentStep;

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

        if(savedInstanceState == null) {
            loadFirstFragment();
        } else {            
            currentStep = savedInstanceState.getInt(CURRENT_STEP_TAG);
            if(currentStep == 2){
                //Do some stuff...
            }
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        Log.d("deubg", "--------onsaveinstancestate--------");
        outState.putInt(CURRENT_STEP_TAG, currentStep);
        super.onSaveInstanceState(outState, outPersistentState);
    }

 ...

}
Run Code Online (Sandbox Code Playgroud)

问题是onSavedInstanceState在屏幕变化时不会被调用,并且根据谷歌文档,它应该.消息"-------- onsaveinstancestate --------"未在控制台中显示.但是,onCreate方法中的Bundle savedInstanceState在屏幕旋转后为非null,但它没有int'sturrentStep'.

我尝试了很多东西:为ActionBarActivity更改了AppCompatActivity,将super.onSavedInstanceState的调用移到了不同​​的位置,试图存储其他变量; 但无论我做什么,该方法都不会执行.

另外,我的清单中没有android:configChanges.

我的应用程序是针对sdk版本22,buildToolsVersion 22.0.1编译的

java android android-fragments android-activity

25
推荐指数
1
解决办法
6484
查看次数

模拟模拟器中的活动查杀

我想测试一下onSaveInstanceStateonRestoreInstanceState我在模拟器应用程序.

我发现了这个,它说我们可以在方向更改期间模拟这个,但是我将一些变量存储在应用程序级别(子类android.app.Application)中,因此方向更改不会消除变量.

所以我的问题是,我如何模拟低内存情况,从而杀死我的活动?

希望我已经清楚了.谢谢

android activity-lifecycle android-activity

21
推荐指数
5
解决办法
1万
查看次数

在方向更改时保存UI - 如果保留Fragment,则onSaveInstanceState无法按预期工作

使用compat lib v1(因为某些错误而不使用v2 | 3); 这个问题的一个变种.

我有一个片段,其UI具有各种控件,我希望在方向更改时保持其状态.

父方活动在方向改变时被销毁(请不要告诉我有关清单变化以避免活动娱乐!!!!).

片段调用setRetainInstance(true).

1)现在我的理解是,具有唯一ID的视图应该保留一些状态,例如方向更改.鉴于此,我期望一个非null的bundle,onCreateView|onActivityCreated但它是null.

2)在任何情况下如果我保存状态onSaveInstanceState(确保我调用super)我仍然在'onCreateView | onActivityCreated'中得到一个空包

3)如果我不调用setRetainInstance(true)那么onCreateView|onActivityCreated即使我没有`onSaveInstanceState'方法,我也会得到一个非空包.

我的问题是,这是否按预期工作,我对生命周期的理解被打破了?无论如何,我猜测对我来说最好的方法是保留片段,然后在片段中保持控件的状态.

提前致谢.彼得.

android android-fragments

18
推荐指数
1
解决办法
1万
查看次数