Android runOnUiThread导致内存泄漏

184

我的Android应用程序中发生内存泄漏。这是一个简单的音乐播放器。在屏幕底部,我有一个TextView,用于显示经过的时间。它在下面的线程中更新。

每次更改方向时,堆大小都会增加。通过查看DDMS堆更新,看来我的活动没有被垃圾收集。但是,如果按照下面的说明注释掉了6行,GC会将堆保持在相当一致的大小。您能否让我知道造成此泄漏的原因是什么?

private void updateTimerAndSeekBar() {
    Thread updater = new Thread() {
        SeekBar seekbar = (SeekBar) findViewById(R.id.seekBar1);
        TextView timer = (TextView) findViewById(R.id.currentTime);
        public void run() {

            while (mediaPlayer.isPlaying()) {

 //             runOnUiThread(new Runnable() {
 //                 @Override
 //                 public void run() {
 //                     timer.setText(msToMins(mediaPlayer.getCurrentPosition()));
 //                 }
 //             });

                try {
                    seekbar.setProgress(mediaPlayer.getCurrentPosition());
                    sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    };
    updater.start();
}
弯头

每次更改方向时,Android都会创建并启动一个新活动。内存泄漏是由于以下事实造成的:垃圾收集器无法收集不再需要的旧活动,因为单独的线程仍在运行,并且作为一个内部类,该活动正在保留该活动。

要消除内存泄漏,您需要在活动被破坏时停止并结束单独的线程。

boolean stopThread;


private void updateTimerAndSeekBar() {

    stopThread = false;

    Thread updater = new Thread() {
        ...

        while (!stopThread && mediaPlayer.isPlaying()) {
                try {
                    seekbar.setProgress(mediaPlayer.getCurrentPosition());
                    sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    };
    updater.start();
}



protected void onDestroy () {
    stopThread = true;
    super.onDestroy();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Fragment Webview内存泄漏

来自分类Dev

ZDecompressStream()导致内存泄漏

来自分类Dev

Android runOnUiThread导致内存泄漏

来自分类Dev

Android VideoView Http实时流内存泄漏

来自分类Dev

QProcess导致内存泄漏

来自分类Dev

由于android.widget.BubblePopupHelper而导致的内存泄漏

来自分类Dev

Android中内存泄漏的潜在原因

来自分类Dev

Android动画内存泄漏

来自分类Dev

IOPSCopyPowerSourcesInfo()导致的内存泄漏

来自分类Dev

非常简单的Android应用中的内存泄漏

来自分类Dev

结合RxJava了解Android内存泄漏

来自分类Dev

Android幻灯片显示导致内存泄漏

来自分类Dev

Android进度条内存泄漏

来自分类Dev

这是iOS / Android上的内存泄漏吗

来自分类Dev

NSRunAlertPanel导致内存泄漏

来自分类Dev

Android套接字-内存泄漏-传入消息

来自分类Dev

Android WebView发生内存泄漏

来自分类Dev

Android VideoView Http实时流内存泄漏

来自分类Dev

Android:由于成员变量导致内存泄漏?

来自分类Dev

在Android片段上获取内存泄漏

来自分类Dev

这是Android中的内存泄漏吗

来自分类Dev

防止Android中的内存泄漏

来自分类Dev

Android-这是内存泄漏吗?

来自分类Dev

Android内存泄漏自定义视图

来自分类Dev

Android WeakReference处理内存泄漏

来自分类Dev

Android 内存泄漏 - 匿名类

来自分类Dev

fork() 导致内存泄漏

来自分类Dev

Android:由于活动和上下文存储为对象属性而导致内存泄漏?

来自分类Dev

静态变量会导致android中的内存泄漏吗?