创建即使在应用终止后也会运行的Android应用服务

时间:2017-03-04 06:27:20

标签: android android-service

这是我想在后台运行的服务

public class CustomMyService extends Service {

     public CustomMyService() {

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        Intent intent = new Intent("com.android.ServiceStopped");
        sendBroadcast(intent);
    }
}

清单文件

<service android:name=".CustomMyService">
            <intent-filter android:priority="1000">
                <action android:name="android.location.PROVIDERS_CHANGED"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>

请有人告诉我。我做了所有google和youtube搜索,没有任何工作。

我正在使用redmi note 3,其中我有一个名为autostart的选项,如果我为此应用程序授予autostart权限,则服务在后台运行。

但是这个选项并不存在于许多其他Android智能手机中,因此当应用程序终止时,应用程序服务将被终止。

请让我知道即使应用程序终止后服务如何运行。

6 个答案:

答案 0 :(得分:1)

使用AlarmManager随时调用您的服务。因为应用程序终止时服务将停止。需要再次撤销,警报管理有助于重新启动服务。

有很多方法可以提及连续服务,但这些方法对于kitkat版之后的没有帮助。

如果您已经成功连续运行您的服务,即使应用程序终止后,请不要使用任何报警管理器,如调度方法,请告知我们。

答案 1 :(得分:1)

请参阅onStartCommand方法和参数:

START_STICKY

START_NOT_STICKY

START_REDELIVER_INTENT

START_STICKY_COMPATIBILITY

如果不起作用,也许您没有系统权限来保持服务在后台运行

答案 2 :(得分:0)

以下是演示:

 public class SyncJobService extends Service {
private String TAG = "mytag";
private Timer timer = new Timer();
private EventBus evenBus = EventBus.getDefault();
public static Date lastSyncDate;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            Log.d(TAG, "run: StartSyncEvent");
  //                Implement your logic


          }
        }, 0, 5 * 60 * 1000);//5 Minutes

}

@Override
public void onDestroy() {
    Log.d(TAG, "onDestroy: ");
    super.onDestroy();
}

}

ManiFest文件:

    <service
        android:name=".service.SyncJobService"
        android:enabled="true"
        android:exported="false" />

答案 3 :(得分:0)

在某些手机中,如 lenovo,xolo 等终止后台第三方应用程序。因此,当应用程序关闭时,它将不允许在后台进行服务。请使用其他手机检查您的服务。 1.Better使用启动前台服务。 2.在开始粘滞时,如果应用程序终止,则服务会自动重新启动以进行后台处理。

答案 4 :(得分:0)

将您的服务作为前台进程,以便Android系统将其视为前台应用程序,并且不会轻易杀死它。使用以下代码将您的服务作为前台。

StartForeground(100, new Notification ());

请记住,您需要在服务的ondestroy中调用stopforeground(100)。

答案 5 :(得分:0)