【问题标题】:Exception dispatching input event, while calling startActivity异常调度输入事件,同时调用 startActivity
【发布时间】:2016-01-29 15:00:14
【问题描述】:

在 StackOverflow 和其他论坛上已经提出了几个相关问题。但是,这仍然是造成的,没有一个解决方案对我有用。另外,我想声明我正在使用设备 13'3 英寸 Braun 平板电脑。

根据 Activity 的应用流程,

A Activity 调用 B Activity 和来自 B 我正在调用带有标志 FLAG_ACTIVITY_CLEAR_TOP 的 Activity,然后从 Activity A 到 Activity B 重复该过程。下面是更详细的解释

我正在从一个对话框中调用我的 MainActivity 来更新数据库,如下所示,

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(context.getString(R.string.IS_UPDATE_DATA), true);
context.startActivity(intent);

之后,我使用 AsyncTask 从 Web 服务调用更新我的数据库,并在完成更新后使用下面的代码从 Activity 的 onTouch() 启动Activity,

Intent intent = new Intent(mContext, CategoryActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);

这每次都会导致以下崩溃,

01-29 20:21:44.631: E/InputEventReceiver(3213): Exception dispatching input event.
01-29 20:21:44.631: E/MessageQueue-JNI(3213): Exception in MessageQueue callback: handleReceiveCallback
01-29 20:21:44.651: E/MessageQueue-JNI(3213): java.lang.NullPointerException
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.os.Parcel.readException(Parcel.java:1431)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.os.Parcel.readException(Parcel.java:1379)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1892)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.Instrumentation.execStartActivity(Instrumentation.java:1412)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.Activity.startActivityForResult(Activity.java:3407)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.Activity.startActivityForResult(Activity.java:3368)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:839)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.Activity.startActivity(Activity.java:3603)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.Activity.startActivity(Activity.java:3571)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at com.brodos.app.storeship.MainActivity.onTouch(MainActivity.java:857)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.View.dispatchTouchEvent(View.java:7258)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2177)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1878)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2177)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1878)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2177)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1878)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2177)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1878)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2470)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1633)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.Activity.dispatchTouchEvent(Activity.java:2428)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2418)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.View.dispatchPointerEvent(View.java:7443)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchPointerEvent(PhoneWindow.java:2323)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3526)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3471)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4612)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4591)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4683)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.os.MessageQueue.nativePollOnce(Native Method)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.os.MessageQueue.next(MessageQueue.java:125)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.os.Looper.loop(Looper.java:124)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at android.app.ActivityThread.main(ActivityThread.java:5063)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at java.lang.reflect.Method.invokeNative(Native Method)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at java.lang.reflect.Method.invoke(Method.java:511)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-29 20:21:44.651: E/MessageQueue-JNI(3213):   at dalvik.system.NativeStart.main(Native Method)

如果有人可以指导或有解决方案,请告诉我。另外,如果有任何需要添加的内容,请告诉我。

【问题讨论】:

  • 我猜第 857 行有空指针错误
  • 如果您命名您运行的操作系统版本,它会有所帮助。我正在查看 ActivityManagerNative 类并且无法获取导致 NPE 的特定行,一旦 1892 与我正在查看的不匹配。
  • @KonstantinLoginov 它的 4.2.2
  • @PankajNimgade 它的原生崩溃,我调试过,我的意图不为空
  • 只是一个建议:请将变量 mContext 替换为 MainActivity.this 并调试它。

标签: android performance android-layout android-fragments android-intent


【解决方案1】:

我遇到过和你很相似的情况,解决办法是这样的:

if (savedInstanceState != null) {
    Intent mIntent = new Intent(context, SomeActivity.class);
    mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(mIntent);
    mIntent.overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}

【讨论】:

  • 这在我的情况下不起作用,因为我想在 onTouch 事件中开始另一个活动以及为什么你要我检查savedInstanceState == null,但我仍然想在我的 onTouch 事件中开始另一个活动
  • 我不知道谁赞成这个答案,我颠倒了比较!
  • 无论如何,检查savedInstanceState != null 只是为了确保我们有一个保存的Context,这将触发应该保存的startActivity(mIntent);,以确保它不是源错误。
【解决方案2】:

当您运行 AsyncTask 时,我认为您需要在 AsyncTask()onPostExecute() 方法中开始您的活动。

【讨论】:

  • 好吧,好吧!你的意思不清楚。他告诉我们... call using AsyncTask and on completion of update I am using below code ...,这基本上就是我猜他的意思
  • @lalit-poptani 你是否像 venkat530 提到的那样执行你的 onTouch() ?
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
相关资源
最近更新 更多