Как создать тост из IntentService? Он застревает на экране

Я пытаюсь, чтобы мой IntentService показывал сообщение Toast, но, отправляя его из сообщения onHandleIntent, тост показывает, но застревает, а экран и никогда не выходит. Я предполагаю, потому что метод onHandleIntent не встречается в основном потоке службы, но как я могу его переместить?

Кто-нибудь имеет эту проблему и решил ее?

Solutions Collecting From Web of "Как создать тост из IntentService? Он застревает на экране"

В onCreate() инициализируйте Handler а затем onCreate() его из своего потока.

 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")); } 

Используйте 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(); } }); 

Вот полный код класса IntentService, демонстрирующий тосты, которые помогли мне:

 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."); } }