android - Toast.makeText().show() 消息在 Activity-less 服务中去哪里?

标签 android android-service android-toast

我有一个 MyServiceClass 定义如下:

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
    }
}

如果我从同一包/应用程序/APK 中的 Activity 类调用 startService(new Intent(getBaseContext(), MyService.class));,那么我可以看到 Toast 消息。

但是,如果我将此类简单地绑定(bind)到启动接收器,将其放入一个没有任何 Activity 的应用程序(即,仅服务应用程序)中:

public class BootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, com.example.tutorialspoint7.noactivity.MyService.class));
    }
}

然后,当服务启动时,我就再也看不到消息了。

我可以通过 Package Browser 按需重启服务:

enter image description here

我明白,如果没有提供 UI 的 Activity ,那么这些消息实际上就没有地方可以显示。不过,我的问题是:

  1. 是否有默认位置可以找到这些消息? (例如日志文件、缓冲区、LogCat 等)
  2. 我可以将这些消息重定向到主屏幕当前屏幕吗?
  3. 为什么 Android Studio 框架在看到/构建的 APK 包含无处可显示的 Toast.makeText().show() 消息时不显示警告?

最佳答案

Toast 消息与您的 Activity 无关,但它是 Android UI 上的一项服务,可以被任何应用程序/Activity 访问。简单浏览一下源代码就会告诉您这一点。 因此,如果您通过 getApplicationContext() 传递应用程序上下文,它也会从无 Activity 的应用程序中显示。

仅供引用: toast 未绑定(bind)到您的 Activity 的 UI。如果您从 Activity 中显示 toast ,然后将其最小化(按主页),则 toast 会保留在主屏幕上。

不,您看不到未显示的 toast 消息,因为它们未在服务本身中排队。

关于 android studio 警告,我不确定它为什么不报告它,您可以提出与此相关的问题。但我读过 android 开发人员建议在所有实例中使用应用程序上下文,即使在 Activity 上下文可用时也是如此。抱歉,我无法从我读到这篇文章的地方找到来源。

关于android - Toast.makeText().show() 消息在 Activity-less 服务中去哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42901845/

相关文章:

android - 带有相机 2 API 的 Android Lollipop 上的 ZSL 功能

java - Android 传感器在单独的线程中注册监听器

使用 Fuel Framework 不显示 Android Toast 消息

java - Android 测试是否显示 toast

android - 简单的 Android toasts 没有正确对齐

android - 在 android 中使用兼容的库

android - android 6.0运行时需要哪些权限

android - 如何在android中生成小apk

android - 是否可以知道哪个应用程序绑定(bind)到我的服务?

android - Android上最 "death-resistant"的组件是什么?