Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使应用程序被强制停止也要重新启动服务,即使关闭应用程序也要在后台继续运行服务。如何?_Java_Android_Service - Fatal编程技术网

Java 即使应用程序被强制停止也要重新启动服务,即使关闭应用程序也要在后台继续运行服务。如何?

Java 即使应用程序被强制停止也要重新启动服务,即使关闭应用程序也要在后台继续运行服务。如何?,java,android,service,Java,Android,Service,我正在尝试在后台运行服务。我的应用程序所做的是,当用户选中复选框时,服务启动,当未选中时,服务停止。这是非常好的工作。但问题是,当我从task manager关闭应用程序时,它也会停止服务。我想要的是即使服务与任务管理器关闭后仍能保持运行。这个问题已经问过了,看。 我将复制接受的答案: 下面是我使用的前台服务的一个例子,它可以工作,当应用程序关闭时它仍然保持活动状态。当然,它也必须启动,对于该任务,应用程序必须一眼就能运行,或者必须设置启动事件的接收器,但这是另一回事 public class

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

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

下面是我使用的前台服务的一个例子,它可以工作,当应用程序关闭时它仍然保持活动状态。当然,它也必须启动,对于该任务,应用程序必须一眼就能运行,或者必须设置启动事件的接收器,但这是另一回事

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);
请注意用作操作的两个常量,它们是必须以包名称开头的字符串