开始新活动的哪种方式最好?

4 android android-intent android-activity

在我的Android开发学习过程中,我遇到了两种不同的方式来启动新的活动.现在我开始怀疑.

他们都很好.但是,我想知道其中一个选项是否更好用,为什么?

我的第一个例子(也是我迄今为止最喜欢的一个例子):

Intent intent = new Intent(this, MainMenuActivity.class);
            this.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

第二个:

startActivity(new Intent("com.example.MENUSCREEN"));
Run Code Online (Sandbox Code Playgroud)

我需要在清单中将android:name添加到我的intent-filter中:

<activity
    android:name="com.example.MainMenuActivity"
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    <intent-filter>
        <action android:name="com.example.MENUSCREEN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

我理解我是否正确,意图就像在说,我打算做某事?做出行动的"意图".

Mar*_*res 7

只是回答你的问题:

开始新活动的哪种方式最好?

取决于你想要做什么以及你想要开始的活动实际存在的地方,只是为了简而言之,Intent可以分为两种类型Explicit/Implicit.

你正在尝试的第一个:

Intent intent = new Intent(this, MainMenuActivity.class);
this.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

是"明确的",这意味着您可以访问实际处理其自身意图的类,通常只有在类在项目中的某个位置时才有可能,但情况并非总是如此,有时您可能需要打开一个Activity从另一个应用程序,然后您将使用第二个选项.

你试过的第二个:

startActivity(new Intent("com.example.MENUSCREEN"));
Run Code Online (Sandbox Code Playgroud)

是"隐式",这是一个动作,任何适合"动作/类别/数据"意图过滤器的活动将能够处理,如果多个活动可以处理它,操作系统会弹出一个窗口询问用户选择其中一个.

正如您所看到的,一种方式并不比另一种更好,这完全取决于您想要做什么以及操作系统使您能够在不同情况下开始活动的可能性.

希望能帮助到你!

问候!

  • @Adnaves:为了扩展这一点 - 实际上不鼓励在清单中向你的`Activity`添加`<intent-filter>`,除非你需要从其他应用程序访问它.如果您只需要从自己的应用程序启动`Activity`,那么删除`<intent-filter>`并始终使用显式的`Intent`. (4认同)