Handler声明称静态内部类,实例化报错

安卓开发实现下载进度条

在使用Handler更新UI的时候,我是这样写的


handler = new Handler(){

        @Override

        public void handleMessage(Message msg) {

            progressBar.setProgress((Integer)msg.obj);

            textView.setText("已下载"+msg.obj+"%");

        }

        };

编译器给出了这样的警告

This Handler class should be static or leaks might occur


查询资料后,使用静态内部类


 private static class MyHandler extends Handler {

        private final WeakReference<MainActivity> mActivity;

        public MyHandler(MainActivity activity) {

            mActivity = new WeakReference<MainActivity>(activity);

        }

    @Override

    public void handleMessage(Message msg) {

        if (mActivity.get() != null) {


        }

    }

}

实例化MyHandller的时候依旧给出这样的警告

This Handler class should be static or leaks might occur


以及我的静态内部类声明有问题吗?


完整的代码


public class MainActivity extends AppCompatActivity {

    private ProgressBar progressBar;

    private TextView textView;

    private int downloadStatus = 0;


    private static class MyHandler extends Handler {

        private final WeakReference<MainActivity> mActivity;

        public MyHandler(MainActivity activity) {

            mActivity = new WeakReference<MainActivity>(activity);

        }

        @Override

        public void handleMessage(Message msg) {

            if (mActivity.get() != null) {

            }

        }

    }

    private static MyHandler handler;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        textView = (TextView) findViewById(R.id.textShow);


        handler = new MyHandler(this) {

            public void handleMessage(Message msg) {

                progressBar.setProgress((int) msg.obj);

                textView.setText("已下载" + msg.obj + "%");

            }


        };

        new MyThread().start();

    }



白猪掌柜的
浏览 923回答 3
3回答

翻翻过去那场雪

你为什么要写了Handler类之后还要重新new出来一个继承MyHandler的类,你把dispatchMessage要做的事情直接放到MyHandler里就可以了。

哔哔one

不要在new MyHandler()继承重写,把操作直接定义在MyHandler的定义中。另外&nbsp;private static MyHandler handler;&nbsp;这句不要使用静态化定义,直接定义成&nbsp;private MyHandler handler;

HUX布斯

这个地方会导致内存泄漏啊,引用了外部类的变量了,导致他没法释放啊。你对内存泄漏不了解吧。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java