gpt4 book ai didi

java - android 服务关闭后继续

转载 作者:行者123 更新时间:2023-12-02 07:54:25 25 4
gpt4 key购买 nike

我有服务InfoReceiver。该服务在应用程序启动时启动,并在应用程序关闭时仍在运行。此外,我还添加了应用程序以在启动完成时启动。该服务将每 82 毫秒(24 小时)调用我想要的代码。我不知道如何在手机关闭时让线程 hibernate 。另外我想在 120 小时后销毁已完成的服务。这是我的代码

提前谢谢您!

InfoReceiver.java

 public class InfoReceiver extends Service {

@Override
public void onCreate()
{
super.onCreate();



//do something code


}

}

MyBroadcastreceiver.java

public class MyBroadcastReceiver extends BroadcastReceiver {
private Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object
cal.add(Calendar.SECOND, 84000);
Intent startServiceIntent = new Intent(context, InfoReceiver.class);
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startServiceIntent, 0);
AlarmManager am = (AlarmManager) mContext.getSystemService(mContext.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), startPIntent);


}



}

list 文件

<service android:name=".InfoReceiver"
android:enabled="true">
<intent-filter>
<action android:name=".InfoReceiver"/>

</intent-filter>
</service>
<receiver android:process=":remote" android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

最佳答案

您不应该为此使用线程 sleep 。系统会很快终止你的服务(相对而言,24 小时对于内存中拥有相同的应用程序来说是很长的时间)。相反,您应该使用 AlarmManager 并请求您的应用程序触发 Intent ,以便您可以每天工作。启动时,注册 AlarmManager 每隔几天执行一次工作。另外,每当您完成一些工作时,请保存您完成的时间(可能在 SharedPreferences 中),这样您就可以知道在这段时间之后停止向 AlarmManager 请求更新。这将为您提供一个设计,您的应用程序可以在内存不足时消失——安全地免除您的任何内存杀死投诉——然后在必要时再次工作。

关于java - android 服务关闭后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9828319/

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