如何,我只是剛剛重新啓動我的整個應用程序,而不是試圖在的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. 的GlassFish - 部署應用程序而無需重新啓動域
- 4. 變化的應用配置,而無需重新啓動應用程序
- 5. 更新配置文件,無需重新啓動應用程序
- 6. 改變Rails應用程序的文件,而無需重新啓動服務器
- 7. 從狀態欄啓動應用程序而無需重新創建
- 8. 從IAP中從UIViewController中刪除AdBannerView,而無需重新啓動應用程序
- 9. 更改iOS應用程序語言,而無需重新啓動設備
- 10. 重新加載Vaadin UI而不重新啓動應用程序
- 11. JRebel的/ SBT如何重新編譯Web應用程序而無需重啓
- 12. 自動更新位置而不重新啓動應用程序
- 13. iOS:如何以編程方式更改應用程序語言而無需重新啓動應用程序?
- 14. 如何在iOS9中更改應用程序的語言而無需重新啓動應用程序?
- 15. GTK應用程序無法啓動 - 需要重新啓動xfs選項
- 16. 重新加載配置,而無需使用ConfigurationManager重新啓動應用程序。刷新段
- 17. 如何在模擬器中啓動iOS應用程序而無需重新編譯應用程序
- 18. 在iOS中更改應用程序語言而無需重新啓動應用程序
- 19. 如何更改應用程序語言而無需重新啓動/關閉應用程序?
- 20. 我需要擔心我的應用程序中的時區嗎?
- 21. 是否有可能重新部署Heroku應用程序,而無需重新啓動一些進程類型
- 22. [Android]應用程序重新啓動設備後重新啓動
- 23. 將重新啓動應用程序重新啓動前面
- 24. 無法重新啓動webbrick而無需重新啓動ec2實例
- 25. 重新啓動我的應用程序
- 26. 更新Android應用程序而不重新啓動設備
- 27. 重新加載模擬器中的Android應用程序而無需在Eclipse中重新啓動模擬器?
- 28. 崩潰後重新啓動ASP.NET核心應用程序
- 29. 您是否需要擔心在重新啓動時清理內存
- 30. 如何在Genymotion和Android Studio中重新加載應用程序而無需重新啓動模擬器?
我不確定你的意思是線性規劃,但這是一個數學術語 –