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