Attempted to Finish an Input Event …
… but input event receiver has already been disposed.
This is the error I got while trying to do something off a menu in Android. Silly really. The message is not too revealing so I ended up scouring the net for an answer and scratching my head afterwards…
With a service
My problem was trying to launch a service; I figured it out with a single step:
Disable the filter in Android Studio (logcat). Then, just before this message, I got another one:
1 2 3 4 |
03-16 20:51:10.601 468-788/system_process W/ActivityManager﹕ \ Unable to start service Intent { \ cmp=com.laurivan.android.testapp.dev/com.laurivan.android.testapp.services.MyIntentService \ } U=0: not found |
which gave me the real reason: I forgot to add the service to my manifest file. Lesson learned.
With a button
This question refers to the same problem, but in a different scenario: a button’s event displaying a Toast.
My solution involves the same “disable the filter” from above and see the real reason.
To decouple the Toast from an ephemeral widget, I have a solution; write a wrapper:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class DisplayToast implements Runnable { private final Context mContext; private final String mText; public DisplayToast(Context mContext, String text) { this.mContext = mContext; mText = text; } public void run() { Toast.makeText(mContext, mText, Toast.LENGTH_SHORT).show(); } } |
and use it via a Handler object, e.g.:
1 2 |
mhandler = new Handler(); mhandler.postDelayed(new DisplayToast(getApplicationContext(), "Epic message!"), 100 /* ms */); |
This way, even if the source goes away, the Toast gets shown.
A little experiment: If you find this post and ad below useful, please check the ad out :-)
[…] my previous post, I’ve presented a Toast solution via a Handler and a Runnable. While that solution was a nice […]