tipos studio servicios servicio saber primer plano implementar example esta ejemplo corriendo como android multithreading intentservice android-toast

saber - servicios en primer plano android studio



¿Cómo crear tostadas desde IntentService? Se atasca en la pantalla. (3)

Aquí está el código completo de la Clase IntentService que demuestra los brindis que me ayudó:

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

Estoy intentando que mi IntentService muestre un mensaje de Toast, pero al enviarlo desde el mensaje onHandleIntent, el toast se muestra pero se atasca y la pantalla nunca se corta. Supongo que es porque el método onHandleIntent no ocurre en el hilo principal del servicio, pero ¿cómo puedo moverlo?

¿Alguien tiene este problema y lo resolvió?


Use la Manija para publicar un Runnable que contenga su operación

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


en onCreate() inicialice un Handler y luego onCreate() desde su hilo.

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