Android循环runnable增加堆

时间:2015-02-02 22:19:44

标签: java android heap-memory

我在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

0 个答案:

没有答案