2017-02-08 22 views
0

重新啓動在我的應用程序有2個活動,A和B.活動A如何總是從頂部活動執行一些全局初始化,顯示飛濺,連接到後端去取一些用戶信息等。然後啓動活動B.在活動B中,如果用戶決定撤銷應用程序的某些權限,則Android會殺死整個進程並重新啓動應用程序(棉花糖行爲),但會啓動活動B,這有意義用戶的角度 - 它將你帶回你離開的地方。但是在活動A中完成的初始化從未執行。如何強制重新啓動後始終啓動活動A(在清單中標記爲LAUNCHER活動的方式)?當應用程序是由Android

我可以檢測活動B這種情況下,有執行所需的初始化,但在真正的應用程序有很多活動,我想不會有所有兒童活動時,這種情況發生時進行初始化。

回答

1

您可以在自定義應用程序進行全局的初始化和配置清單文件中使用應用。

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     // Called when the application is starting, before any activity, service 
     init(); 
    } 

    private void init() { 
     android.util.Log.i("MyApplication", "initialize"); 
    } 
} 

而且在AndroidManifest.xml文件:

<application 
    android:name=".MyApplication" 
    ...> 

或者使用基本活動,讓誰需要執行初始化擴展基本活動等活動。

public class BaseActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (!isInitialized()) { 
      startActivity(new Intent(this, SplashActivity.class)); 
      finish(); 
     } 
    } 

    private boolean isInitialized() { 
     // your initialization state 
     return false; 
    } 
} 
+0

我傾向於這種方法;不幸的是,有很多活動需要修改,如果有一種自動方式強制應用程序在應用程序重新啓動時繼續通過SplashActivity(),那將會很不錯。 –

-1

有一個解決方法,你可以在活動B的onDestroy方法中啓動活動A.如果你設置了一個適當的標誌然後Intent,你可以得到結果作爲描述。

下面的一些代碼:

// Activity B 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    Intent intent = new Intent(this, A.class); 
    // this flag will clear all activity and retain activity A 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    startActivity(intent); 
} 

在我的測試,這項工作。

你的情況,你應該檢查的銷燬時間,如果onDestroy稱呼,是因爲用戶決定從App撤銷部分權限,

+0

的onDestroy()是沒有得到所謂的在這種情況下,託管應用程序的整個過程被殺害。 –

相關問題