提问人:TLE SE 提问时间:10/22/2023 更新时间:10/25/2023 访问量:22
当活动和服务被破坏时,不会清理共享类
Share class is not cleaned when activity and service detroyed
问:
- 我有一个应用程序使用前台服务,此服务可以由用户关闭。我创建了一个类,其中包含一些状态变量,这些变量通过活动和服务进行常见引用。当我先关闭服务,然后关闭应用程序时,这个类被清理了,但是当我先关闭应用程序然后关闭服务时,这个类没有被淘汰(我知道这是因为我在这个类中有一个计数变量,并且在retart应用程序时没有清除)。那么我的应用程序会泄露内存吗?以及解决它的好方法。
这是我的班级
public class serviceState {
public static boolean isMyServiceRunning = false;
public static boolean sysConnectState = false;
public static boolean sysAuth = false;
public static int count = 0;
}
- 第二个问题。在这项服务中,我使用铃声管理器播放语音警告。它工作正常,但只播放了大约 270 次,下次,声音更改为默认通知音,但不知道原因。这是我的铃声:
placed onCreate
RINGTONE_VIBRATE = RingtoneManager.getRingtone(getApplicationContext(), "sound file path");
use:
if(!RINGTONE_VIBRATE.isPlaying())
RINGTONE_VIBRATE.play();
非常感谢大家! 对不起我的英语
我想解决我的问题
答:
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
}
}
}
评论