gpt4 book ai didi

android - 更新 TextView 的文本导致 GC_CONCURRENT 问题

转载 作者:行者123 更新时间:2023-11-30 03:57:09 24 4
gpt4 key购买 nike

我的问题

我有一个计时器,它像这样初始化并调用一个方法来更新对象。问题是每次触发计时器时我都会在我的 LogCat 中得到 GC_CONCURRENT 输出。

11-01 11:56:43.042: D/dalvikvm(30950): GC_CONCURRENT freed 774K, 52% free 3303K/6791K, external 1763K/2129K, paused 3ms+4ms

这是我的计时器初始化以及任务。

    if (CCTrackManager.timer == null) 
CCTrackManager.timer = new Timer("TrackUpdate");
MyTimerTask task = new MyTimerTask();
CCTrackManager.timer.scheduleAtFixedRate(task, 0, 1000);

所以这只调用了一次就不会再调用,(除非计时器停止并重新启动)。

我的更新方法看起来是这样。

 public void addSecondToTrackDuration() {
this._currentRecordingTrack.setDuration(this._currentRecordingTrack.getDuration() + 1);
this.mListener.trackUpdated(this._currentRecordingTrack);
}

然后这是我的处理程序,我用它来处理从该线程获取值到我的 UI 线程。

//----------------------------------------------------------------------
// HANDLES THE UPDATE OF THE TRACK. NEEDS HANDLER BECAUSE THE TIMER WHICH CALLS THIS RUNS ON ANOTHER THREAD
//----------------------------------------------------------------------
static class UpdateTrackHandler extends Handler {

WeakReference<MainActivity> mActivity;
UpdateTrackHandler(MainActivity act) {
mActivity = new WeakReference<MainActivity>(act);
}

@Override
public void handleMessage(Message msg) {
TrackFragment tf = (TrackFragment) mActivity.get().getSupportFragmentManager().findFragmentByTag(RECORDING_TRACK_FRAG);
if (tf != null) {
tf.updateViewWithTrack((CCTrack)msg.obj);
}
}
}

UpdateTrackHandler mHandler = new UpdateTrackHandler(this);

//----------------------------------------------------------------------
// CALLED FROM CCTRACKMANAGER WHEN AN UPDATE OCCURS ON THE CURRENT RECORDING TRACK
//----------------------------------------------------------------------
public void trackUpdated(CCTrack track) {
Message msg = new Message();
msg.obj = track;
mHandler.sendMessage(msg);
}

我不认为这是问题所在。我认为问题出在我实际更新 TextView 的 fragment 中,因为当我将其注释掉 this.durationValueTxtView.setText("TIME"); 时,它不再发生了。

public void updateViewWithTrack(CCTrack track) {
this.durationValueTxtView.setText("TIME");
}

我的问题

在我的处理程序创建、定时器创建、定时器任务创建、 TextView 引用方面,我是否遗漏了什么?有什么事吗?

提前致谢

最佳答案

当您不使用 CCTrack 实例时,为什么要在 updateViewWithTrack(CCTrack track) 中发送它?尝试删除它,您的代码可能会正常工作。

  • 只要您的代码中存在内存泄漏,就会抛出 GC_CONCURRENT。
  • 尝试阅读 this this

关于android - 更新 TextView 的文本导致 GC_CONCURRENT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13176632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com