我在Android中创建了一个简单的Activity,其中包含无限循环的Runnable。堆将继续增加,直到GC_CONCURRENT被抛出。这是正常的行为,还是应该改变我编码的方式?
以下是代码:
public class MainActivity extends Activity implements Runnable {
private final Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler.postDelayed(this, 100);
}
@Override
public void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(this);
}
@Override
public void run() {
TextView textView = (TextView)findViewById(R.id.text_id);
textView.setText(R.string.hello_world);
TextView textView2 = (TextView)findViewById(R.id.text_id2);
textView2.setText(R.string.hello_world);
TextView textView3 = (TextView)findViewById(R.id.text_id3);
textView3.setText(R.string.hello_world);
mHandler.postDelayed(this, 100);
}
}
所以我有3个TextViews,我只想调用runnable来更新显示的文本(这里我放置了资源字符串,但它可以是任何字符串)。我在旋转平板电脑时没有看到内存泄漏(为此我应该使用WeakReference或删除onDestroy()上的回调)。我只是不明白为什么堆增加而且没有任何GC。一旦runnable被执行,它应该被垃圾收集,如果UI可以快速刷新超过100ms,那么堆应该停止增加。
感谢您的帮助, JB