[セットトップ]Androidメモリ漏洩防止handler
Androidメモリ漏洩防止handler
1.弱参照WeakRefHanderの使用
3.handleMessageでのビジネスロジックの処理
サンプルコード:
参考作者:-Coding-Android作者
1.弱参照WeakRefHanderの使用
/** * : allen on 15/11/24. https://coding.net/u/coding/p/Coding-Android/git */
/** * handler */
public class WeakRefHander extends Handler {
private final WeakReference<Handler.Callback> mRef;
private final int mLoopTime;
private int NO_LOOP = -1;
private int what =0;
/** * * * @param loopAction * @param loopTime */
public WeakRefHander(Handler.Callback loopAction, int loopTime) {
super();
this.mRef = new WeakReference<>(loopAction);
this.mLoopTime = loopTime;
}
/** * * * @param loopAction */
public WeakRefHander(Handler.Callback loopAction) {
super();
mRef = new WeakReference<>(loopAction);
mLoopTime = NO_LOOP;
}
@Override
public void handleMessage(Message msg) {
Handler.Callback action = mRef.get();
if (action != null) {
action.handleMessage(msg);
if (mLoopTime != NO_LOOP) {
sendEmptyMessageDelayed(what, mLoopTime);
}
}
}
public void start() {
removeMessages(0);
sendEmptyMessageDelayed(0, 0);
}
public void start(int what, long delay) {
this.what = what;
removeMessages(what);
sendEmptyMessageDelayed(what, delay);
}
public void stop() {
removeMessages(what);
}
public void clear() {
removeMessages(what);
mRef.clear();
}
}
2.Activity implements WeakRefHanderを実現する.Callback3.handleMessageでのビジネスロジックの処理
サンプルコード:
public class MainActivity extends AppCompatActivity implements WeakRefHander.Callback {
private WeakRefHander weakRefHander;
private static final int HANDLER_MESSAGE_START = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
weakRefHander = new WeakRefHander(this, 1);
weakRefHander.start(HANDLER_MESSAGE_START, 1000 * 30);
}
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case HANDLER_MESSAGE_START:
//Todo
break;
default:
break;
}
return true;
}
@Override
public void onResume() {
super.onResume();
weakRefHander.start();
}
@Override
public void onPause() {
weakRefHander.stop();
super.onPause();
}
@Override
protected void onDestroy() {
weakRefHander.clear();
super.onDestroy();
}
}
-Githubサンプル参照コード参考作者:-Coding-Android作者