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

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

【问题讨论】:

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

标签: android android-layout android-activity


【解决方案1】:

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

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

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

相关SO问题:https://stackoverflow.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 TrainingAPI Guide 了解有关服务的更多信息

【讨论】:

  • 这个无显示的东西拯救了我的一天!
  • 使用Theme.Translucent 而不是Theme.NoDisplay。见here
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2016-08-31
相关资源
最近更新 更多