This IntentService I created will show Toasts in onStartCommand() and in onDestroy(), but not in onHandleIntent(). Am I missing something about the limitations of an IntentService?
public class MyService extends IntentService { private static final String TAG = "MyService"; public MyService(){ super("MyService"); } @Override protected void onHandleIntent(Intent intent) { cycle(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); //This happens! return super.onStartCommand(intent,flags,startId); } @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { Toast.makeText(this, "service stopping", Toast.LENGTH_SHORT).show(); //This happens! super.onDestroy(); } private void cycle(){ Toast.makeText(this, "cycle done", Toast.LENGTH_SHORT).show(); //This DOESN'T happen! Log.d(TAG,"cycle completed"); //This happens! } }
The accepted answer is not correct.
Here is how you can show toast from onHandleIntent()
:
Create a DisplayToast class:
public class DisplayToast implements Runnable { private final Context mContext; String mText; public DisplayToast(Context mContext, String text){ this.mContext = mContext; mText = text; } public void run(){ Toast.makeText(mContext, mText, Toast.LENGTH_SHORT).show(); } }
Instantiate a Handler
in your service's constructor and call the post
method with a DisplayToast
object inside.
public class MyService extends IntentService { Handler mHandler; public MyService(){ super("MyService"); mHandler = new Handler(); } @Override protected void onHandleIntent(Intent intent) { mHandler.post(new DisplayToast(this, "Hello World!")); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With