我正在学习针对多配置文件场景的Android应用程序开发,并创建了一个简单的服务,每隔几秒钟显示一次Toast消息。该服务调用startForeground
。
正如预期的那样,会显示Toast消息并在通知栏中显示通知(startForeground
所需)。
更新:使用处理程序显示toast,遵循答案中建议的相同方法:
Handler handler =new Handler();
handler.post(new Runnable() {
public void run() {
Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show()
}
});
但是,登录其他用户个人资料时:
我知道该服务仍在运行,因为它继续输出日志消息(adb logcat
),并且没有任何错误消息表明此调用显示吐司失败:
我尝试在登录新用户配置文件后以编程方式停止并重新启动服务,但没有运气。如果在新用户配置文件中手动重新启动应用程序,则会出现祝酒词和通知 。
这不是系统应用程序,因此解决方案需要授予系统应用程序的权限是不可接受的。
服务是否可以显示来自服务的Toast消息,而不管当前的用户配置文件是什么?
答案 0 :(得分:0)
您无法通过服务显示Toast。只有UI线程可以做UI相关的事情,而Toast也是UI。有关详细信息,请参阅Communicating with the UI Thread。
您可以尝试这种方法:
添加到您的服务:
protected Handler mHandler = new Handler();
然后您需要发布Runnable
以显示Toast:
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show()
}
});