gpt4 book ai didi

java - "Do not place Android context classes in static fields; this is a memory leak"- 静态 View 的 Lint 警告

转载 作者:行者123 更新时间:2023-12-02 13:05:00 32 4
gpt4 key购买 nike

有一些标题相似的问题,但它们都与您在构造函数中获得的上下文有关。

RecyclerView 包含项目,还有一些其他 View ,其中存在播放\暂停按钮。

此类允许该 View 一次仅播放一个文件。如果 view_1 正在播放并且您在 view_2 处按“播放”,则将播放 file_2。

这个类中有一个ImageButton mPlayPauseButton。需要将view_1处的ImageButton设置为paused_state。并将view_2处的ImageButton设置为playing_state。

绒毛警告

不要将 Android 上下文类放置在静态字段中;这是内存泄漏(也会破坏即时运行)静态字段会泄漏上下文。

public class CommentsAudioPlayer {

private static MediaPlayer mPlayer;
private static ImageButton mPlayPauseButton;

private static void init(ImageButton imageButton){
mPlayer = new MediaPlayer();
mPlayPauseButton = imageButton;
}

public static void startPlaying(String dataSource, ImageButton imageButton) {
init(imageButton);

try {
mPlayer.setDataSource(dataSource);
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stopPlaying();
}
});
mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mPlayer.start();
}
});
mPlayer.prepareAsync();
if (mPlayPauseButton != null) mPlayPauseButton.setSelected(true);
} catch (Exception e) {
Log.e("Player", "Error trying to start playing:\n" + e.toString());
}
}

public static void stopPlaying() {
if (mPlayPauseButton != null)
mPlayPauseButton.setSelected(false);
mPlayPauseButton = null;

if (mPlayer!=null)
mPlayer.release();
mPlayer = null;
}
}

答案 Warning: Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)没有解决我的问题。

最佳答案

不要将小部件放在 static 中字段。

选项包括:

  1. 删除此类。将所有这些逻辑移至 Activity (或 fragment )中,您可以在其中直接访问小部件。

  2. 使用事件总线( LocalBroadcastManager 、greenrobot 的 EventBus 等)。让您的代码在状态更改时在总线上发布消息。让您的 UI( Activity 或 fragment )订阅总线上的消息并更新小部件。

  3. 让您的 Activity/fragment 包含 CommentsAudioPlayer 的实例,并将字段设置为 CommentsAudioPlayerstatic .

在这三个选项中,第一个选项更简单、更干净、占用内存更少且执行速度更快。

关于java - "Do not place Android context classes in static fields; this is a memory leak"- 静态 View 的 Lint 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44169270/

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