簡體   English   中英

從首次啟動android應用程序時的不同活動開始

[英]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編程突破極限》一書中描述了一種解決方案。 您需要執行以下操作:

  1. 創建您的活動(好吧,讓我們說它們是主要活動和設置活動),然后將它們添加到清單中,如下所示:

     <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> 

  2. 顯示設置活動時,將其禁用並以編程方式啟用“主要活動”:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM