Android应用程序逻辑

Android应用程序逻辑,android,Android,在安卓应用程序中,当用户启动我的应用程序时,我希望加载一个与我通常会加载的不同的活动。因此,用户在第一次启动后使用应用程序后,会加载默认活动,但在第一次启动时会加载不同的活动。我计划设置一个共享首选项布尔值,以查看应用程序之前是否已启动。我是否应该首先加载默认活动,然后检查它是否是第一次启动,如果检查显示它是第一次启动,是否应该将该活动更改为不同的活动?或者反过来:首先加载在第一次启动时加载的活动,如果不是第一次启动,则加载默认活动。为什么不使用片段?加载主活动时,请检查标志,然后加载相应的片段

在安卓应用程序中,当用户启动我的应用程序时,我希望加载一个与我通常会加载的不同的活动。因此,用户在第一次启动后使用应用程序后,会加载默认活动,但在第一次启动时会加载不同的活动。我计划设置一个共享首选项布尔值,以查看应用程序之前是否已启动。我是否应该首先加载默认活动,然后检查它是否是第一次启动,如果检查显示它是第一次启动,是否应该将该活动更改为不同的活动?或者反过来:首先加载在第一次启动时加载的活动,如果不是第一次启动,则加载默认活动。

为什么不使用片段?加载主活动时,请检查标志,然后加载相应的片段。

是的,您可以调用
startActivity(otherActivity)
然后
FirstActivity.finish()
,立即在第一个活动的
OnCreate
中调用您可以执行的操作(其中有一些警告)要在AndroidManifest中同时显示这两个活动,第一个要显示的活动设置为启用,另一个设置为禁用。然后,在第一个活动的
onCreate()
中,禁用该活动并启用第二个活动:

<activity
    android:name=".Activity1"
    android:enabled="true"
    android:label="@string/title_activity_activity1">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

<activity
    android:name=".Activity2"
    android:enabled="false"
    android:label="@string/title_activity_activity2">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

这里需要注意的是,如果用户已经在主屏幕上创建了应用程序的快捷方式,它将在第一次运行后消失,需要手动替换(尽管您可以添加INSTALL_快捷方式权限并手动添加,但我不建议这样做).

在这种情况下,片段不会提供额外的优势,可能会使代码更难维护
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_activity1);

    // Enable the second one
    setActivityEnabled(true, Activity2.class);

    // Disable the current one
    setActivityEnabled(false, Activity1.class);
}

void setActivityEnabled(boolean enabled, Class<? extends Activity> activityClass) {
    int state = enabled ?
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED;

    getPackageManager().setComponentEnabledSetting(
            new ComponentName(this, activityClass), state, PackageManager.DONT_KILL_APP);
}