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

时间:2014-03-04 23:43:25

标签: android android-intent android-activity

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

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

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

Intent intent = new Intent(this, MainMenuActivity.class);
            this.startActivity(intent);

第二个:

startActivity(new Intent("com.example.MENUSCREEN"));

我需要将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>

我理解我是否正确,意图就像说,我打算做某事?采取行动的“意图”。

2 个答案:

答案 0 :(得分:8)

回答你的问题:

  

哪种方式开展新活动最好?

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

你正在尝试的第一个:

Intent intent = new Intent(this, MainMenuActivity.class);
this.startActivity(intent);

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

你试过的第二个:

startActivity(new Intent("com.example.MENUSCREEN"));

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

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

希望它有帮助!

问候!

答案 1 :(得分:3)

Intent helpIntent = new Intent(this, HowToPlay.class);
this.startActivity(helpIntent);

将始终开始HowToPlay活动。

startActivity(new Intent("com.example.MENUSCREEN"));

将启动可以处理给定意图的活动。如果有多个活动可以处理意图,系统将显示一个对话框供用户选择他们将使用的活动。

如果你想要准确地开始特定活动,请使用第一个,如果你只是想开始可以处理动作的东西,则使用第二个,而你不关心那个是什么(例如打开一个网页,你不关心用户正在使用什么浏览器。