来自 JobIntentService 的吐司

Posted

技术标签:

【中文标题】来自 JobIntentService 的吐司【英文标题】:Toast from JobIntentService 【发布时间】:2019-11-21 23:24:48 【问题描述】:

我是初学者。 我想要来自 jobintentservice (onHandleWork) 的 Toast,但我的应用程序崩溃了。 logcat 错误是:“不能在没有调用 looper.prepare() 的线程上烤面包” 我想在 jobintentservice 中与处理程序一起学习 请帮帮我。

public class NotificationService extends JobIntentService 
    public static final String TAG = NotificationService.class.getSimpleName();
    Handler handler;

    public static void enqueuWork(Context context,Intent intent)
        enqueueWork(context,NotificationService.class,20,intent);
    
    public void onCreate() 
        super.onCreate();
        Toast.makeText(this, "Start background Service", Toast.LENGTH_SHORT).show();
    

    @Override
    public int onStartCommand(@Nullable Intent intent, int flags, int startId) 
        handler = new Handler();

        return super.onStartCommand(intent, flags, startId);
    

    @Override
    protected void onHandleWork(@NonNull Intent intent) 
        handler.post(new Runnable() 
          @Override
          public void run()
              Toast.makeText(NotificationService.this, "onhandlework", Toast.LENGTH_SHORT).show();

          
      );

【问题讨论】:

【参考方案1】:

你现在已经猜到了,但对于未来的读者来说,错误“不能在没有调用 looper.prepare() 的线程上烤”只是意味着你必须从 ui 线程调用相关的 ui。

activity.runOnUiThread(new Runnable() 
@Override
public void run() 
    showToast(activity);
);

您可以找到类似的问题here 和here

【讨论】:

以上是关于来自 JobIntentService 的吐司的主要内容,如果未能解决你的问题,请参考以下文章

在低于 Marshmallow 的版本上显示吐司消息

Activity 和 JobIntentService 生命周期

JobIntentService 的 onDestroy 被调用后会发生啥?

JobIntentService - onHandleWork 并不总是被调用?

JobIntentService 不调用 OnHandleWork

JobIntentService 不会在 Android 8.0 上立即启动