google推荐方法添加static,但个人目前并不喜欢那样子
目前对几种handler写法进行了测试,测试方法与结果如下:
package com.android.chaos;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.myreveallayout.R;
public class MainActivity extends Activity{
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this,TestActivity.class);
startActivity(intent);
}
});
}
}
package com.android.chaos;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import com.example.myreveallayout.R;
import java.lang.ref.WeakReference;
/**
* 项目名称:
* 类描述:
* 创建人:
* 创建时间:2016/6/15 15:02
* 修改人:
* 修改时间:2016/6/15 15:02
* 修改备注:
*/
public class TestActivity extends Activity {
//2,3写法虽然不会被lint检查出来,但任然会造成leak,第四,五种测试目前不会造成内存无法回收
//第5种写法,会让调用方法都要写成static,对应的一些成员变量也要变成static
//测试方法:不停点击mainActivity中button,在studion 中查看内存情况
//建议在onDestory中添加handler.removeCallbacksAndMessages(null);移除
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//第四种方案
MyHandler handler = new MyHandler(this);
handler.sendEmptyMessageDelayed(111,60 * 10 * 1000);
finish();
}
//第一种方案
/*private static Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};*/
//第二种方案
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
return false;
}
}) ;
//第三种方案 public class TestActivity extends Activity implements Handler.Callback
//实例化时 Handler handler = new Handler(this)
//第五种方案
/*private static Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
return false;
}
}) ;*/
private static class MyHandler extends Handler {
WeakReference<Activity > mActivityReference;
MyHandler(Activity activity) {
mActivityReference= new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
final TestActivity activity = (TestActivity) mActivityReference.get();
if (activity != null && !activity.isFinishing()) {
activity.set();
}
}
}
private void set(){
// TODO: 2016/6/15
}
}
网友评论