每个活动都必须有一个布局吗?

Posted

技术标签:

【中文标题】每个活动都必须有一个布局吗?【英文标题】:Must every activity have a layout? 【发布时间】:2013-06-25 03:05:28 【问题描述】:

我刚刚开始使用 android,正在阅读 BroadcastReceiver。由于 MainActivity 仅用于以秒为单位获取警报时间,这让我开始思考布局 XML 文件是否必须用于 Android 中的每个活动。我的意思是,是否有可能有一个应用程序在启动时不显示任何视图,但成功设置了接收器?

【问题讨论】:

谢谢,但我不认为这是一个笼统的讨论,或者可能会产生主观意见。我在问这样的事情是否可能。我想我会从我的帖子中删除“一般讨论”。 我认为您正在考虑一项服务... @EMarci15:谢谢!看来我今晚有很多阅读要做! :) 类似:***.com/questions/8571887/… @wtsang02 你的评论描绘了当今大多数人在 *** 上讨厌的东西:人们尽可能地寻找结束问题,甚至不去理解为什么会提出这个问题,或者它是否真的是重复的。如果只有在 cmets 上可行,我会否决你,并且我肯定将你标记为没有建设性。 【参考方案1】:

答案是肯定的,这是可能的。活动不一定要有 UI。它在文档中提到,例如:

活动是用户可以做的单一的、专注的事情。几乎 所有活动都与用户交互 [...]

(见http://developer.android.com/reference/android/app/Activity.html

相关SO问题:https://***.com/a/12817384/534471

例如从没有布局的 Activity 中显示 Toast 您可以在清单中定义该 Activity,如下所示:

<activity
    android:name=".MainActivity"
    android:theme="@android:style/Theme.NoDisplay">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

代码如下所示:

public class MainActivity extends Activity 
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        Toast.makeText(this, "I'm alive", Toast.LENGTH_LONG).show();
        finish();
    

【讨论】:

好的。 . .首先,假设用户单击应用程序并显示 Toast 消息(可能在 5 秒后)。但它必须是一项活动,而不是(正如其他人发布的那样)一项服务。可能吗? 是的,活动中会显示 Toast,但为什么要在 5 秒后显示?没有用户愿意等待 5 秒... 还有其他方法可以安排警报。如果应用程序已经有闹钟时间,则无需启动 Activity,但实际上不知道您要实现什么。 目的不是用户体验相关的,而是教育性的。理想情况下,我想使用 AlarmManager 和 BroadcastReceiver 等,但让我们简化问题,只显示一个 Toast。 在我看来通知可能更适合您的问题。如果您只是想通知用户警报响起,那么这就是您要走的路。【参考方案2】:

您可以在没有 UI 的情况下实现 Activity。在清单中,您可以指定android:theme="@android:style/Theme.NoDisplay"。看看this

您还可以实现一个没有任何 UI 的服务,因此您不需要布局膨胀。服务只是在后台运行并且不显示任何视图。 查看Android Training 和API Guide 了解有关服务的更多信息

【讨论】:

这个无显示的东西拯救了我的一天! 使用Theme.Translucent 而不是Theme.NoDisplay。见here

以上是关于每个活动都必须有一个布局吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android开发——UI_片段

我应该为Dagger 2中的每个活动使用一个组件吗?

当条件多个布局应用于单个活动时管理单个数据绑定对象

android学习-1

我必须在 Android Manifest 中指定父活动名称吗?

如何打开另一个活动而不会丢失主要活动布局上的项目?