我有一个下载一些文件的IntentService.问题是我在IntentService中创建了一个Toast
Toast.makeText(getApplicationContext(), "some message", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
如果我退出应用程序,Toast将永远不会消失.摧毁它的唯一方法就是杀死这个过程.
我究竟做错了什么?
ron*_*y l 74
问题是IntentService没有在主应用程序线程上运行.你需要获得一个Handler主线程(in onCreate())并将Toast其作为一个发布到它Runnable.
以下代码应该做的伎俩:
@Override
public void onCreate() {
super.onCreate();
mHandler = new Handler();
}
@Override
protected void onHandleIntent(Intent intent) {
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyIntentService.this, "Hello Toast!", Toast.LENGTH_LONG).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
Ton*_*Ton 23
这对我有用:
public void ShowToastInIntentService(final String sText) {
final Context MyContext = this;
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast toast1 = Toast.makeText(MyContext, sText, Toast.LENGTH_LONG);
toast1.show();
}
});
};
Run Code Online (Sandbox Code Playgroud)
IntentService将创建一个线程来处理新的intent,并在任务完成后立即终止它.因此,Toast将不受死线控制.
当屏幕上显示toast时,您应该在控制台中看到一些例外.
Ric*_*ler -9
您不应该Toast从 a 创建 s Service。你应该使用 aNotification来代替。
| 归档时间: |
|
| 查看次数: |
20969 次 |
| 最近记录: |