gpt4 book ai didi

java - 即使应用程序被强制停止,也要重新启动服务,即使在关闭应用程序后仍然在后台运行服务如何?

转载 作者:行者123 更新时间:2023-12-01 18:11:15 26 4
gpt4 key购买 nike

我正在尝试在后台运行服务。我的应用程序所做的是当用户选中复选框然后服务启动以及未选中时服务停止。哪个工作得很好。但问题是当我从任务管理器关闭应用程序时,它也会停止服务。我想要的是即使在任务管理器关闭后也能保持服务运行。

最佳答案

这个问题已经有人问过了,看here .
我将复制接受的答案:

这是我使用的前台服务示例,并且该服务在应用程序关闭时仍处于 Activity 状态。当然,它也必须启动,并且对于该任务,应用程序必须乍一看正在运行,或者必须设置启动事件的接收器,但这是另一回事。

public class MyService extends Service {
static final int NOTIFICATION_ID = 543;

public static boolean isServiceRunning = false;

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null && intent.getAction().equals(C.ACTION_START_SERVICE)) {
startServiceWithNotification();
}
else stopMyService();
return START_STICKY;
}

// In case the service is deleted or crashes some how
@Override
public void onDestroy() {
isServiceRunning = false;
super.onDestroy();
}

@Override
public IBinder onBind(Intent intent) {
// Used only in case of bound services.
return null;
}


void startServiceWithNotification() {
if (isServiceRunning) return;
isServiceRunning = true;

Intent notificationIntent = new Intent(getApplicationContext(), MyActivity.class);
notificationIntent.setAction(C.ACTION_MAIN); // A string containing the action name
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent contentPendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.my_icon);

Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(getResources().getString(R.string.app_name))
.setTicker(getResources().getString(R.string.app_name))
.setContentText(getResources().getString(R.string.my_string))
.setSmallIcon(R.drawable.my_icon)
.setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false))
.setContentIntent(contentPendingIntent)
.setOngoing(true)
// .setDeleteIntent(contentPendingIntent) // if needed
.build();
notification.flags = notification.flags | Notification.FLAG_NO_CLEAR; // NO_CLEAR makes the notification stay when the user performs a "delete all" command
startForeground(NOTIFICATION_ID, notification);
}

void stopMyService() {
stopForeground(true);
stopSelf();
isServiceRunning = false;
}
}

然后我运行它
Intent startIntent = new Intent(getApplicationContext(), MyService.class);
startIntent.setAction(C.ACTION_START_SERVICE);
startService(startIntent);

请注意用作操作的两个常量,它们是必须以包名称开头的字符串。

关于java - 即使应用程序被强制停止,也要重新启动服务,即使在关闭应用程序后仍然在后台运行服务如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60465819/

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