0

我们正在创建一个 Activity 以在 Android Jelly Bean 4.1 上查看 PDF 文件,三星 Galaxy S3 默认启动 Polaris Viewer。我们第一次这样做时,它起作用了。但是我们第二次这样做时,我们得到了这个错误:

E/ActivityThread( 6788): Activity
com.infraware.polarisoffice4.viewer.PDFViewerActivity has leaked IntentReceiver com.infraware.polarisoffice4.viewer.PDFViewerActivity$2@4219c850 that was originally registered here. Are you missing a call to unregisterReceiver()?
E/ActivityThread( 6788): android.app.IntentReceiverLeaked: Activity com.infraware.polarisoffice4.viewer.PDFViewerActivity has leaked IntentReceiver com.infraware.polarisoffice4.viewer.PDFViewerActivity$2@4219c850 that was originally registered here. Are you missing a call to unregisterReceiver()?
E/ActivityThread( 6788):    at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:792)
E/ActivityThread( 6788):    at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:593)
E/ActivityThread( 6788):    at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1254)
E/ActivityThread( 6788):    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1241)
E/ActivityThread( 6788):    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1235)
E/ActivityThread( 6788):    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:372)
E/ActivityThread( 6788):    at com.infraware.polarisoffice4.viewer.PDFViewerActivity.onCreate(PDFViewerActivity.java:109)
E/ActivityThread( 6788):    at android.app.Activity.performCreate(Activity.java:5206)
E/ActivityThread( 6788):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
E/ActivityThread( 6788):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
E/ActivityThread( 6788):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
E/ActivityThread( 6788):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
E/ActivityThread( 6788):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
E/ActivityThread( 6788):    at android.os.Handler.dispatchMessage(Handler.java:99) E/ActivityThread( 6788):     at android.os.Looper.loop(Looper.java:137)
E/ActivityThread( 6788):    at android.app.ActivityThread.main(ActivityThread.java:4898)
E/ActivityThread( 6788):    at java.lang.reflect.Method.invokeNative(Native Method)
E/ActivityThread( 6788):    at java.lang.reflect.Method.invoke(Method.java:511)
E/ActivityThread( 6788):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
E/ActivityThread( 6788):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
E/ActivityThread( 6788):    at dalvik.system.NativeStart.main(Native Method)

如果我们安装 Adob​​e Reader,那么我们不会得到这个异常(即使我们仍然在对话框中选择 Polaris 作为查看器)。如果我们卸载 Adob​​e Reader,异常会再次出现。

如果我们终止进程并重新启动,我们将能够在 Polaris 中查看一个 PDF,但是当我们查看第二个 PDF 时会出现异常。(我们查看什么 PDF 无关紧要:我们查看的第一个将打开,第二个则不会。)

有什么建议么?

4

3 回答 3

0

我猜它在打开一个pdf后不会回到活动中。尝试在关闭该 pdf 并尝试打开新的 pdf 后返回该活动。

于 2013-01-23T17:30:04.107 回答
0

当您以编程BroadcastReceiver方式向 an注册 aIntentFilter然后忘记取消注册时,通常会发生此错误。确保在系统删除您的 Activity 之前取消注册接收器(例如onStop()onDestroy())。或者,您可以BroadcastReceiver通过执行以下操作取消注册后一个广播:

@Override public void onReceiver(Context context, Intent intent) {
    context.unregisterReceiver(this);
    /* ... */
}

只要确保如果广播从未发送过,您在Activity关闭之前在其他地方取消注册接收器。

于 2013-01-23T17:38:56.750 回答
0

由于我们无法解决问题,我们决定在提交 PDF 以供查看之前检查一下 Polaris 是否是唯一安装的查看器。如果是,我们建议用户去获取 Adob​​e Reader。

于 2013-02-06T20:41:11.793 回答