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

问题描述 投票:0回答:1
  1. 我有一个应用程序使用前台服务,该服务可以由用户关闭。我创建了一个类,其中包含一些由活动和服务共同引用的状态变量。当我先关闭服务,然后关闭应用程序时,这个类被清理了,但是当我先关闭应用程序然后关闭服务时,这个类没有被破坏(我知道这一点,因为我在这个类中有一个计数变量,并且在重新启动应用程序时它没有被清除) )。那么我的应用程序会泄漏内存吗?以及解决问题的好方法。

这是我的课

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 service singleton
1个回答
0
投票

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

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

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  
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.