首次启动Android应用

时间:2016-01-16 17:31:24

标签: android android-activity launch

有没有办法在启动时启动一次不同的活动?如果我立即从主要活动中启动我的设置活动,则会暂停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();
        ...

    }

4 个答案:

答案 0 :(得分:5)

这可以通过多种方式完成。其中之一是使用共享首选项,其中将存储有关已访问活动的数据(例如介绍活动)。

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这是实现该功能的最佳方式 - 当然也是最简单的。

这只是一个想法(功能齐全),您可以根据自己的需要进行调整。

答案 1 :(得分:1)

Erik Hellman在“Android Programming Pushing the Limits”一书中描述了一个解决方案。您需要执行以下操作:

  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);
    
  3. 我还没有尝试过,但它仍然可以正常工作。

答案 2 :(得分:0)

我认为你的原始代码非常接近你想要的。 但是,要使它在视觉上有效,您需要做几件事。

首先,如果您确实打算显示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
        }
    }

答案 3 :(得分:-1)

尝试将此代码放在setContentView()

之前