1

今日はグーグルで検索しましたが、私の質問に答える簡単な解決策が見つかりません。「このハンドラクラスは静的でなければならない、またはリークが発生する可能性があります」という Lint の警告があるので、Romain Guy や他の多くの人によって提案されたロジックに従い、次のようにハンドラを構築しました。

public static class MyHandler extends Handler {
    private final WeakReference<CustomTrophyCreateActivity> mActivity;

    MyHandler(CustomTrophyCreateActivity activity) {
        mActivity = new WeakReference<CustomTrophyCreateActivity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {

    if (mActivity != null) {
    Activity activity = mActivity.get();
        if (activity != null) {
            // Call non static method in enclosing activity.. CANT DO THIS
            startUploadPhoto();
        }
    }           
}

したがって、基本的な質問は..メモリリークを回避するために静的に作成されたハンドラーからこの非静的メソッドを呼び出すにはどうすればよいですか??

startUploadPhoto() を静的にすることは本当に避けたいと思います。1) 静的である必要はなく、2) 変数を変更する多くの作業が必要になるからです。このリント警告がポップアップする理由を完全に理解しています..それを取り除くための簡単な解決策を見つけることができないようです. ありがとうございました。

4

1 に答える 1

0

暗黙の囲みクラスではなく、参照を使用してメソッドを呼び出す必要があります。試すactivity.startUploadPhoto();

于 2013-01-10T02:33:41.460 に答える