![](/img/trans.png)
[英]Android: always launch start activity when app is destroyed and recreated
[英]Start with different activity on first launch of android app
有沒有一種方法可以在啟動時啟動一次不同的活動? 如果我從主活動中立即啟動設置活動,則會有1秒鍾的暫停並出現白屏。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent myIntent = new Intent(this, home2.class);
this.startActivity(myIntent);
finish();
...
}
這可以通過幾種方式來完成。 其中之一是共享首選項的使用,其中將存儲有關所訪問活動(例如介紹活動)的數據。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean isAccessed = prefs.getBoolean(getString(R.string.is_accessed), false);
if(!isAccessed) {
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean(getString(R.string.is_accessed), Boolean.TRUE);
edit.commit();
showIntroActivity();
} else {
startReqularActivity();
}
另外,還有更多方法可以完成該請求(例如->將訪問狀態存儲在db或屬性文件中,或者如果必須從某個后台控制應用程序,則將其存儲在雲中)。 IMO這是實現該功能的最佳方法-當然也是最簡單的。
這只是個主意(功能齊全),您可以根據需要進行調整。
Erik Hellman在《 Android編程突破極限》一書中描述了一種解決方案。 您需要執行以下操作:
創建您的活動(好吧,讓我們說它們是主要活動和設置活動),然后將它們添加到清單中,如下所示:
<activity android:name=”.SetupActivity” android:label=”@string/app_name_setup” android:icon=”@drawable/app_setup_icon” android:enabled=”true”> <intent-filter> <action android:name=”android.intent.action.MAIN”/> <category android:name=”android.intent.category.LAUNCHER”/> </intent-filter> </activity> <activity android:name=”.MainActivity” android:label=”@string/app_name” android:icon=”@string/app_icon” android:enabled=”false”> <intent-filter> <action android:name=”android.intent.action.MAIN”/> <category android:name=”android.intent.category.LAUNCHER”/> </intent-filter> </activity>
顯示設置活動時,將其禁用並以編程方式啟用“主要活動”:
PackageManager packageManager = getPackageManager(); packageManager .setComponentEnabledSetting(new ComponentName(this, MainActivity.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); packageManager .setComponentEnabledSetting(new ComponentName(this, SetupActivity.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
我還沒有嘗試過,但是仍然可以正常工作。
我認為您的原始代碼非常接近您想要的代碼。 但是,需要做幾件事才能使其在視覺上起作用。
首先,僅在實際打算顯示MainActivity時才調用setContentView。 其次,請確保快速加載SetupActivity以避免延遲。 這意味着確保您在onCreate中不做任何耗時的事情。
因此,您可以將MainActivity的代碼更改為:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(isFirstTime()) {
startActivity(new Intent(this, SetupActivity.class));
finish();
} else {
setContentView(R.layout.activity_main);
... // anything else that you need to do to initialize MainActivity
}
}
嘗試將這段代碼放在setContentView()
之前
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.