0

Android Jelly Bean 4.1 で PDF ファイルを表示するアクティビティを作成しています。Samsung Galaxy S3 はデフォルトで Polaris Viewer を起動します。これを初めて実行すると、うまくいきます。しかし、2 回目に実行すると、次のエラーが発生します。

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)

Adobe Reader をインストールすると、この例外は発生しません (ダイアログ ボックスでビューアとして Polaris を選択しても)。Adobe Reader をアンインストールすると、例外が再発します。

プロセスを強制終了して再起動すると、1 つの PDF を Polaris で表示できますが、2 つ目の PDF を見ると例外が発生します。(どの PDF を表示しても問題ありません。最初に表示した PDF は開きますが、2 番目の PDF は開きません。)

助言がありますか?

4

3 に答える 3

0

問題を解決できなかったため、表示する PDF を渡す前に、Polaris がインストールされている唯一のビューアーであるかどうかを確認することにしました。そうである場合は、ユーザーが Adob​​e Reader を入手することをお勧めします。

于 2013-02-06T20:41:11.793 に答える
0

1つのpdfを開いた後、アクティビティに戻らないと思います。そのpdfを閉じて新しいものを開こうとした後、そのアクティビティに戻るようにしてください。

于 2013-01-23T17:30:04.107 に答える
0

このエラーは、通常、プログラムで を に登録BroadcastReceiverし、IntentFilter登録を解除するのを忘れた場合に発生します。アクティビティがシステムによって削除される前に、必ずレシーバーを登録解除してください (onStop()または などonDestroy())。BroadcastReceiverまたは、次のようにして、1 つ後のブロードキャストの登録を解除できます。

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

ブロードキャストが送信されない場合は、Activityをシャットダウンする前に別の場所で受信者の登録を解除してください。

于 2013-01-23T17:38:56.750 に答える