25

我试图让我的 IntentService 显示一条 Toast 消息,但是当从 onHandleIntent 消息发送它时,toast 显示但卡住了,屏幕也没有离开。我猜是因为 onHandleIntent 方法不会发生在主服务线程上,但是我该如何移动它呢?

有没有人遇到这个问题并解决了?

4

3 回答 3

34

onCreate()初始化 aHandler然后从您的线程发布到它。

private class DisplayToast implements Runnable{
  String mText;

  public DisplayToast(String text){
    mText = text;
  }

  public void run(){
     Toast.makeText(mContext, mText, Toast.LENGTH_SHORT).show();
  }
}
protected void onHandleIntent(Intent intent){
    ...
  mHandler.post(new DisplayToast("did something")); 
}
于 2010-10-17T23:44:47.297 回答
5

这是完整的 IntentService 类代码,演示了对我有帮助的 Toast:

package mypackage;

import android.app.IntentService;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;

public class MyService extends IntentService {
    public MyService() { super("MyService"); }

    public void showToast(String message) {
        final String msg = message;
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
            }
        });
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        showToast("MyService is handling intent.");
    }
}
于 2016-01-16T22:06:37.187 回答
3

使用 Handle 发布一个 Runnable,其中包含您的操作

protected void onHandleIntent(Intent intent){
    Handler handler=new Handler(Looper.getMainLooper());
    handler.post(new Runnable(){
    public void run(){ 
        //your operation...
        Toast.makeText(getApplicationContext(), "hello world", Toast.LENGTH_SHORT).show();
    }  
}); 
于 2015-02-04T09:42:51.303 回答