采用静态内部类来替代非静态内部类,并且使用 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-03-13 18:42:42 发布