7

次のエラーが表示されます

「受信者の登録を解除するための電話がありませんか」

戻るボタンを押してアプリケーションを終了したとき。リークの原因となっているレシーバーを特定し、エラーを解消するにはどうすればよいですか? Google のコード「DownLoader」を使用して拡張ファイルをダウンロードしています。

10-27 22:13:32.818: E/ActivityThread(30744): Activity com.ssowens.groovebasstrial.BassActivity has leaked IntentReceiver com.immersion.android.haptics.HapticFeedbackManager$HapticFeedbackBroadcastReceiver@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.android.haptics.HapticFeedbackManager$HapticFeedbackBroadcastReceiver@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)
4

4 に答える 4

10

解決策 1.

ItemClickListener を持つ ListView がある場合は、オーバーライド メソッド onPause でリスナーを null に設定する必要があります。

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 インスタンスが何であるかがわかっている場合は、常に onPause メソッドの登録を解除する必要があります。

@Override protected void onPause() {

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

}

私が知っている2番目の解決策はあなたにはうまくいかないことを知っていますが、参照用に許可します.

お役に立てば幸いです。

于 2013-11-05T22:25:03.950 に答える
3

これが回避策です!! 私は Samsung タブ 7" 4.2.2 を持っています

問題の原因:
1. 4.2.2
2. Layout.xml で定義された ListView
3. 新しい ListView(this)

修正:
1. レイアウトで ListView を宣言せず、代わりにホルダーを宣言し
ます 2. 「this」の代わりに「getApplication()」を使用します 「new ListView(getApplication());」
3. addView(あなたのリストビュー)

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);
}
于 2013-11-18T09:02:20.520 に答える
1

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

于 2013-10-28T02:50:22.147 に答える