这是我想在后台运行的服务
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智能手机中,因此当应用程序终止时,应用程序服务将被终止。
请让我知道即使应用程序终止后服务如何运行。
答案 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)