因为服务进程比后台activity进程重要级高,因此一个要进行耗时工作的activity最好启动一个service来做这个工作,而不是开启一个子进程――特别是这个操作需要的时间比activity存在的时间还要长的时候。
这样一来,即使activity已经被销毁(ondestroy已经执行),这些异步任务仍然保留着对activity实例的引用,所以系统就无法回收这个activity实例了,结果就是activity leak。
public class MainActivity extends AppCompatActivity {
private MyHandler mHandler = new MyHandler(this);
private TextView mTextView ;
private static class MyHandler extends Handler {
private WeakReference<Context> reference;
public MyHandler(Context context) {
reference = new WeakReference<>(context);
}
@Override
public void handleMessage(Message msg) {
MainActivity activity = (MainActivity) reference.get();
if(activity != null){
activity.mTextView.setText("");
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mtextview=(textview)findviewbyid(r.id.textview01)。
mtextview = (textview) findviewbyid(r.id.tv)。
mtextview = (textview) view2.findviewbyid(r.id.goto_main)。
textview mtextview = (textview) contextview.findviewbyid(r.id.textview)。
loadData();

}
private void loadData() {
//...request
Message message = Message.obtain();
mHandler.sendMessage(message);
}
//注意释放
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
}
}
4.器注册造成的内存泄漏
在观察者模式中, 有一个统一的观察者collector集合,
事件器和回调.如果一个类注册了器,但当该类不再被使用后没有注销器,可能会发生内存泄漏。例如,系统的传感器sensor器,
窗口改变WindowFocusChangeListener等等.
器实例:
开辟的内存没有释放,造成内存泄漏(内存泄漏不是一个立即会引发的问题,但是他会消耗系统内存,当内存泄漏比较大,而且又频繁出现的情况下,将造成系统的可用内存降低,出现性能下降甚至程序无法正常运行等情况)。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-89859-6.html
捍卫国家尊严