如何摆脱java中的对象实例?

use*_*232 2 java android garbage-collection

我需要在java中删除一个类的实例,这样我就可以创建一个新实例.在我继续之前必须销毁先前的实例.我意识到Java没有提供隐式删除,并且我一直在尝试使用弱引用的技巧强制垃圾收集来摆脱它.

这是我的代码:

private static void gc() {
    Object obj = new Object();
    WeakReference ref = new WeakReference<Object>(obj);
    obj = null;
    while(ref.get() != null) {
        System.gc();
    }
}

private void setTrack(String path){
    MediaHub current;
    if(!isPlaying){
        current = new MediaHub(title,album,titles,titlePlace,play,next,previous,volume,progress,songTitle,thisInstance,getBaseContext(),path);
    } else {
        current = null;
        gc();
        isPlaying = false;
        setTrack(path);
    }
}
Run Code Online (Sandbox Code Playgroud)

MediaHub是我试图删除一个实例并创建一个新实例的对象.isPlaying是一个布尔实例变量,在类的顶部定义为false.据推测,该方法gc()应该强制进行垃圾收集.

到目前为止,我没有成功(希望显而易见的原因).那么,我该如何删除一个实例MediaHub呢?

编辑:我需要删除的原因是因为在MediaHub中使用了一个Android MediaPlayer,当我需要切换歌曲时,我最终会互相播放两首歌曲.我对代码很深入,我不想重写大量的代码.所以我真的希望在这里得到答案......

Com*_*are 7

那么,如何删除MediaHub的实例?

你没有.

我需要删除它的原因是因为在MediaHub中使用了一个Android MediaPlayer,当我需要切换歌曲时,我最终会互相播放两首歌曲.

然后,你写的方法MediaHub,比如switchSongs(),即呼吁适当的方法MediaPlayerstop()当前歌曲和prepare()(或prepareAsync())下一首歌曲.

  • @ user2726232:"我已经使用过这些方法并在下一首歌中结束了一个研究" - AFAIK,大多数音频播放器使用两个`MediaPlayer`实例,在第二个时调用`prepare()`/`prepareAsync()`第一个是播放时,然后在第一个时调用`stop()`,在切换时调用第二个`start()`.同样,这将由`switchSongs()`方法处理."我只是想知道是否有一个技巧可以摆脱一个实例" - 这不仅是不可能的,它对你的问题没有帮助. (2认同)