当活动和服务被破坏时,不会清理共享类

Share class is not cleaned when activity and service detroyed

提问人:TLE SE 提问时间:10/22/2023 更新时间:10/25/2023 访问量:22

问:

  1. 我有一个应用程序使用前台服务,此服务可以由用户关闭。我创建了一个类,其中包含一些状态变量,这些变量通过活动和服务进行常见引用。当我先关闭服务,然后关闭应用程序时,这个类被清理了,但是当我先关闭应用程序然后关闭服务时,这个类没有被淘汰(我知道这是因为我在这个类中有一个计数变量,并且在retart应用程序时没有清除)。那么我的应用程序会泄露内存吗?以及解决它的好方法。

这是我的班级

public class serviceState {
    public static boolean isMyServiceRunning = false;
    public static boolean sysConnectState = false;
    public static boolean sysAuth = false;
    public static int count = 0;
}
  1. 第二个问题。在这项服务中,我使用铃声管理器播放语音警告。它工作正常,但只播放了大约 270 次,下次,声音更改为默认通知音,但不知道原因。这是我的铃声:
placed onCreate
RINGTONE_VIBRATE = RingtoneManager.getRingtone(getApplicationContext(), "sound file path");

use:
if(!RINGTONE_VIBRATE.isPlaying())
   RINGTONE_VIBRATE.play();

非常感谢大家! 对不起我的英语

我想解决我的问题

Java Android 服务 单例

评论

0赞 avalerio 10/23/2023
1. 我会引导你找到这个公认的答案 stackoverflow.com/questions/641462/...... 简而言之,鉴于您当前使用的字段,我对此表示怀疑,如果您开始添加其他内容,这可能会发生变化。2.没有足够的信息来确定您需要发布更多涉及铃声问题的代码的问题。

答:

0赞 TLE SE 10/25/2023 #1

谢谢@avalerio, 对于1,作为您的链接,有人说它是永久课程(即使活动和服务关闭)。当我尝试关闭所有并保留大约几个小时时,这个类重置了。那么GC会在需要时删除它吗?

关于2。我的意思是当我使用ringtoneManager在资源中播放声音文件时,它只播放了大约250次,并自动更改为sys默认声音。我的初始化如下:

public class bleAPI extends Service{
  private Ringtone RINGTONE_VIBRATE;

  protected void onCreate(){ 
    RINGTONE_VIBRATE = RingtoneManager.getRingtone(getApplicationContext(), "sound file path");
  }

  ...

  //register eventbus to receive data
  @Subscribe   
  public void OnCustomEvent(rxData data) {  
    if(data.getState(),equal("vibrate")){
        sendNotification(); //notification set mute, only vibrate
        if(!RINGTONE_VIBRATE.isPlaying()) RINGTONE_VIBRATE.play(); // only play around 250 times and auto                                       switch to system default sound  
    }
  }
}