采用静态内部类来替代非静态内部类,并且使用 WeakReference 来引用 Activity,如果对象只存在弱引用的话,GC 是会回收这部分内存的。
import java.lang.ref.WeakReference;
public class HandlerActivity extends AppCompatActivity {
private TextView tvShowMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handler);
tvShowMessage = (TextView) findViewById(R.id.tv_show_message);
MemoryLeakHandler handler = new MemoryLeakHandler(this);
handler.sendMessageDelayed(Message.obtain(), 1000 * 10);
}
private static class MemoryLeakHandler extends Handler {
private WeakReference<HandlerActivity> weakReference;
public MemoryLeakHandler(HandlerActivity activity) {
this.weakReference = new WeakReference<HandlerActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
HandlerActivity activity = weakReference.get();
if (activity != null) {
activity.tvShowMessage.setText("MemoryLeak");
Toast.makeText(activity, "memory leak", Toast.LENGTH_SHORT).show();
}
}
}
public void closeActivity(View view) {
this.finish();
}
}
Handler 防止内存泄漏
最新推荐文章于 2023-05-06 12:50:45 发布
本文介绍了一种防止Android应用中内存泄漏的方法,通过使用弱引用结合静态内部类来创建Handler,避免了Activity被强引用导致的内存泄漏问题。
1094

被折叠的 条评论
为什么被折叠?



