如何,我只是刚刚重新启动我的整个应用程序,而不是试图在的onSaveInstanceState非常担心保存的实例,并重新初始化的是一切都恢复了/在onRestoreInstanceState恢复的时候? (这会很快变得容易出错)重新启动应用程序,而无需担心的onSaveInstanceState
回答
UPDATE 10.1.16
我选择了做这的onCreate因为onRestoreInstanceState会出现很奇怪的时候。
这种方法是基于这样的事实:所述的onCreate(捆绑)为空,除非活动正在恢复在这种情况下它是任何的onSaveInstanceState(束)将其设置为。
我设置了两个标志。一个在onSaveInstanceState在Bundle中,以便知道它是由我设置的有效Bundle。另一个在课堂本身确定是否onCreate被称为娱乐或轮转。所以在的onCreate我检查,看看是否的onSaveInstanceState不为空,检查包标志,检查BINIT(默认为false)。如果两个标志都是真的,那么这意味着android转储并销毁我们的应用程序内存,并且确保所有内容在线性样式应用程序中重新初始化的最安全方法就是重新启动它并启动开始活动。
public class SomeMiddleActivity extends AppCompatActivity
{
private static boolean bInit = false; // only way it will be false again is if android cleared our memory and we are recreating
@Override
public void onSaveInstanceState(Bundle state)
{
// set a flag so that onCreate knows this is valid
state.putBoolean("StateSaved", true);
super.onSaveInstanceState(state);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
// this must be called first always for some reason
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
{
if (savedInstanceState.getBoolean("StateSaved", false) && !bInit)
{
// we were recreated... start app over
Intent intent = new Intent(getApplicationContext(), Startup.class);
startActivity(intent);
finish();
return;
}
}
bInit = true; // this will stay true until android has cleared our memory
.......
}
希望这可以帮助别人,尽管这一直工作到目前为止,如果任何人有不同的建议让我知道。
,仅供参考:的的onSaveInstanceState(捆绑,PersistableBundle)版本的的onSaveInstanceState没有被调用过,所以我不知道为什么他们甚至实现它。
参考(?):
按照Android文档
的onCreate
软件包:如果活动被以前被关闭后重新初始化,则该包中包含的数据是最近在onSaveInstanceState(Bundle)中提供。注意:否则它是空的。
如何,我只是刚刚重新启动我的应用程序,而不是试图担心保存实例
你指的是当前的活动?什么也不做(不要执行onSaveInstanceState
和onRestoreInstanceState
)。
当发生更改时,活动会自动创建。如果没有保存的实例状态,该活动将不会恢复任何数据。
编辑:
我想我遇到类似的问题也早几个星期,在那里我已经杀在后面堆中的所有活动,并打开一个全新的活动来了。
// Start Main Activity
Intent intent = new Intent(this, MainActivity.class);
finishAffinity();
startActivity(intent);
使用finishAffinity()
。这适用于> API 16.
当您终止后退堆栈中的所有活动并打开主要活动时,它与重新启动应用程序类似。
否......重新启动整个应用程序,假设我们已经过去了主要(开始)活动。 – zdanman
尝试实施这种方式
private final String IS_RE_CREATED = "is_re_created";
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putBoolean(IS_RE_CREATED, true);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState.containsKey(IS_RE_CREATED)) {
boolean isRecreated = savedInstanceState.getBoolean(IS_RE_CREATED, false);
if (isRecreated) restartApplication(this);
}
}
public void restartApplication(Context context) {
String packageName = context.getPackageName();
PackageManager packageManager = context.getPackageManager();
// Intent to start launcher activity and closing all previous ones
Intent restartIntent = packageManager.getLaunchIntentForPackage(packageName);
restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
restartIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(restartIntent);
// Kill Current Process
Process.killProcess(Process.myPid());
System.exit(0);
}
注:不推荐强行重新启动应用程序。
- 1. 无需重新启动应用程序
- 2. 重新启动应用程序而无需重新启动服务器?
- 3. 变化的应用配置,而无需重新启动应用程序
- 4. 从IAP中从UIViewController中删除AdBannerView,而无需重新启动应用程序
- 5. 从状态栏启动应用程序而无需重新创建
- 6. 更改iOS应用程序语言,而无需重新启动设备
- 7. iOS:如何以编程方式更改应用程序语言而无需重新启动应用程序?
- 8. 如何在iOS9中更改应用程序的语言而无需重新启动应用程序?
- 9. GTK应用程序无法启动 - 需要重新启动xfs选项
- 10. 重新加载配置,而无需使用ConfigurationManager重新启动应用程序。刷新段
- 11. 如何更改应用程序语言而无需重新启动/关闭应用程序?
- 12. 如何在模拟器中启动iOS应用程序而无需重新编译应用程序
- 13. 是否有可能重新部署Heroku应用程序,而无需重新启动一些进程类型
- 14. [Android]应用程序重新启动设备后重新启动
- 15. 重新加载模拟器中的Android应用程序而无需在Eclipse中重新启动模拟器?
- 16. 崩溃后重新启动ASP.NET核心应用程序
- 17. Pitfals将应用程序部署/重新部署到Tomcat而无需重新启动
- 18. 如何在Genymotion和Android Studio中重新加载应用程序而无需重新启动模拟器?
- 19. Spring Boot - 无需重新启动应用程序即可更新ResourceHandlerRegistry
- 20. 的Android的WebView的WebView中应用程序重新启动,而不是重新
- 21. 重新启动Java应用程序
- 22. Netbeans - 应用程序重新启动
- 23. 重新启动Android应用程序
- 24. 应用程序何时重新启动?
- 25. TTNavigator重新启动应用程序内
- 26. Android - backbutton - 重新启动应用程序
- 27. 重新启动Swing应用程序
- 28. 重新启动Rails应用程序
- 29. 重新启动Java应用程序
- 30. 当应用程序重新启动
我不确定你的意思是线性规划,但这是一个数学术语 –