项目中handler比较标准的写法

1. 说明


在我们开发项目中一定会写 handler,并且handler的写法也有很多种,下边是handler比较标准的一种写法,而且不会内存泄露,是避免handler造成内存泄露的一种比较好的写法,代码如下:

public class SplashActivity extends AppCompatActivity {
    MyHandler myHandler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        myHandler = new MyHandler(this);
        myHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                initJump();

            }
        }, 2000);
    }

    private void initJump() {
        //指纹高优先级
        if (PreferenceCache.getFingerFlg()){
            //指纹已开启
            Intent intent = new Intent(SplashActivity.this,VerifyFingerActivity.class);
            startActivity(intent);
            finish();
            return;
        }
        if (PreferenceCache.getGestureFlag()){
            Intent intent = new Intent(getApplicationContext(),ClosePatternPswActivity.class);
            //等于3为认证成功
            intent.putExtra("gestureFlg",3);
            startActivity(intent);
            finish();
            return;
        }
        startActivity(new Intent(getApplicationContext(), MainActivity.class));
        finish();
    }

    static class MyHandler extends Handler {
        private final WeakReference<SplashActivity> mActivty;

        public MyHandler(SplashActivity activity){
            mActivty =new WeakReference<SplashActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(myHandler != null){
            myHandler.removeCallbacksAndMessages(null);
            myHandler = null;
        }
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }
}

分析以上代码可知:

上边的MyHandler 的构造方法中持有该Activity用的是弱引用,同时在 onDestroy()方法中调用removeCallbacksAndMessages(null);移除所有消息,并且将MyHandler 置为null,以上写法可以最大限度的避免 由handler造成的 内存泄露。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容