2013-10-28 4 views
7

を登録したことがないHapticFeedbackBroadcastReceiver受信機の登録を解除するための呼び出しがありません、私は次のエラー私は私を終了するには[戻る]ボタンを打ったとき、私は

を「あなたは受信機の登録を解除するための呼び出しが欠落している」取得応用。どのレシーバがリークを引き起こしているのかを特定し、エラーを排除するにはどうすればよいですか?私は拡張ファイルをダウンロードするためにGoogleから "DownLoader"というコードを使用しています。

10-27 22:13:32.818: E/ActivityThread(30744): Activity com.ssowens.groovebasstrial.BassActivity has leaked IntentReceiver com.immersion.androi[email protected]41d166d0 that was originally registered here. Are you missing a call to unregisterReceiver()? 
10-27 22:13:32.818: E/ActivityThread(30744): android.app.IntentReceiverLeaked: Activity com.ssowens.groovebasstrial.BassActivity has leaked IntentReceiver com.immersion.androi[email protected]41d166d0 that was originally registered here. Are you missing a call to unregisterReceiver()? 
10-27 22:13:32.818: E/ActivityThread(30744): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:800) 
10-27 22:13:32.818: E/ActivityThread(30744): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:601) 
10-27 22:13:32.818: E/ActivityThread(30744): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1650) 
10-27 22:13:32.818: E/ActivityThread(30744): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1630) 
10-27 22:13:32.818: E/ActivityThread(30744): at android.app.ContextImpl.registerReceiver(ContextImpl.java:1624) 
10-27 22:13:32.818: E/ActivityThread(30744): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:430) 
10-27 22:13:32.818: E/ActivityThread(30744): at com.immersion.android.haptics.HapticFeedbackManager.setupPackageBroadcastReceiver(HapticFeedbackManager.java:564) 
10-27 22:13:32.818: E/ActivityThread(30744): at com.immersion.android.haptics.HapticFeedbackManager.<init>(HapticFeedbackManager.java:108) 
10-27 22:13:32.818: E/ActivityThread(30744): at com.immersion.android.HapticFeedbackManagerProxy.initialize(HapticFeedbackManagerProxy.java:90) 
10-27 22:13:32.818: E/ActivityThread(30744): at com.immersion.android.HapticFeedbackManagerProxy.access$100(HapticFeedbackManagerProxy.java:30) 
10-27 22:13:32.818: E/ActivityThread(30744): at com.immersion.android.HapticFeedbackManagerProxy$1$1.run(HapticFeedbackManagerProxy.java:71) 
10-27 22:13:32.818: E/ActivityThread(30744): at java.lang.Thread.run(Thread.java:856) 
+0

可能性のある重複した[アンドロイド4.2.2へのアップグレード以来、奇妙なエラー - 活動がIntentReceiverを漏洩した](HTTP ://stackoverflow.com/questions/18324791/strange-error-since-upgrading-to-android-4-2-2-activity-has-leaked-intentrecei) – blahdiblah

答えて

1

アクティビティに登録したレシーバーでは、unregisterReceiver()を呼び出す必要があります。これは通常onPause()にあります。

1

どのレシーバがリークを引き起こしているのかを特定し、エラーを排除するにはどうすればよいですか?

答えはあなたが投稿したLogCatです。

Activity com.ssowens.groovebasstrial.BassActivity has leaked IntentReceiver com.immersion.androi[email protected]41d166d0 that was originally registered here. 

あなたがアプリを一時停止または閉じたときに、登録を抹消する必要がある、BassActivityHapticFeedbackBroadcastReceiverを登録。 @svenoaksが言うようにあなたがItemClickListenerとリストビューを持っている場合、あなたはあなたが上のnullにリスナーを設定する必要がunregisterReceiver(referenceToReceiver);

+0

フィードバックいただきありがとうございます。 @Oleしかし、私は自分のコードでHapticFeedbackBroadcastReceiverを検索しましたが、一致するものは見つかりませんでした。私はonTouchListenerを使用していると仮定しています。したがって、登録を解除するには、onTouchListenerの登録を解除しますか?登録を解除する方法がわからない – sowens

+3

@sowens 4.2.2を実行しているSamsungデバイスでアプリケーションをテストしていますか? [this](http://stackoverflow.com/questions/18324791/strange-error-since-upgrading-to-android-4-2-2-activity-has-leaked-intentrecei)によると、サムスンのバグ4.2.2ビルド – Ole

+0

はい、私はサムスンのバージョン4.2.2を実行しています。どのようにこのエラーが発生している不幸です。私はそのポストの中で何の仕事も見なかった。 – sowens

10

ソリューション1.

を使用して、Activity.onPause()をオーバーライドして、あなたが登録したすべての受信機の登録を解除する必要がありますメソッドonPauseをオーバーライドします。

listView.setOnItemClickListener(exampleListener);

例:宣言

private OnItemClickListener exampleListener = new OnItemClickListener() {}.... 

@Override 
    public void onPause() { 

     super.onPause(); 

     listView.setOnItemClickListener(null); 

    } 

@Override 
    public void onResume() { 

     super.onResume(); 
      if(listView != null){ 
       listView.setOnItemClickListener(exampleListener); 
      } 
    } 

リスナーの解決策2 あなたのbroadcastReceiverインスタンスが何であるかを知っている場合は、必ずアンoverrive方法onPauseの登録を解除する必要があります。

@Override 保護無効onPause(){

super.onPause(); 
    synchronized (this) { 
     if(broadcastReceiverInstance != null){ 
      unregisterReceiver(broadcastReceiverInstance); 
     } 
    } 

} 

私はそれはあなたのために動作しません知っているが、私は参考のためにそれを聞かせて第二の溶液。

私はそれがあなたを助けてくれることを願っています。

+0

私の質問にお返事ありがとうございます。ただし、上記のコメントを参照してください。私の問題はAndroidの私のバージョン(4.2.2)と私が使用しているタブレット(サムスン7インチ)に固有のものであるように見えます。 @Schwertfisch – sowens

+0

@sowens私はあなたの問題はListViewと思う。あなたが問題を抱えている場合は、リストビューのリスナーをonPauseオーバーライドに設定していません。私の悪い英語のために申し訳ありません。 Answerを編集します。 それが動作するかどうか教えてください。 – schwertfisch

+0

ありがとう私はそれを試してみて、それが動作する場合はお知らせください。 – sowens

3

ここに回避策があります! Layout.xml
3.新しいリストビューで定義されて
1. 4.2.2
2.リストビュー(この)

修正:私は、サムスンタブ7" 問題の4.2.2

原因を持っています:
1.レイアウトでListViewを宣言せず、代わりにホルダを宣言します。
2. 'this' '新しいListView(getApplication());ではなく' getApplication()
3。addView(yourListView)

TheLayoutFile.xml

<RelativeLayout 
     android:id="@+id/listViewHolder" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
    </RelativeLayout> 

あなたの活動でのListViewの

private void displayPostsInListView() { 
    RelativeLayout listViewHolder = (RelativeLayout) findViewById(R.id.listViewHolder); 
    listView = new ListView(getApplication()); 
    listViewHolder.addView(listView); 
    listView.setOnItemClickListener(lineItemListener); 

    adapter = new MyDisplayAdapter(this, listModel.getPostings()); 

    listView.setAdapter(adapter); 
} 
+0

私はそれを試してみましょう。 @ bear – sowens

+0

ホルダーを作成する必要はありません。 onStop()でアダプタを無効にして、必要に応じてリセットするほうが簡単です – Kalle

関連する問題