Android 安卓服务毁了自己
我有一个完整的接收器。此接收器在手机启动时启动服务。但当接收器工作并启动服务时,仅在onDestroy模块上运行服务。我不知道为什么。我创建了一个JobScheduler并检查服务可用性,然后重新运行服务,操作系统每次都会销毁 启动接收器是Android 安卓服务毁了自己,android,android-service,android-broadcastreceiver,Android,Android Service,Android Broadcastreceiver,我有一个完整的接收器。此接收器在手机启动时启动服务。但当接收器工作并启动服务时,仅在onDestroy模块上运行服务。我不知道为什么。我创建了一个JobScheduler并检查服务可用性,然后重新运行服务,操作系统每次都会销毁 启动接收器是 public class BootReciever extends BroadcastReceiver { private static final String TAG="Deneme-App"; @Override public voi
public class BootReciever extends BroadcastReceiver {
private static final String TAG="Deneme-App";
@Override public void onReceive(Context context, Intent intent){
try{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context,DenemeService.class));
}else{
context.startService(new Intent(context,DenemeService.class));
}
GcmNetworkManager mGcmNetworkManager = GcmNetworkManager.getInstance(context);
Task periodicTask = new PeriodicTask.Builder()
.setService(BestTimeService.class)
.setPeriod(1)
.setFlex(1)
.setTag("checkService")
.setPersisted(true)
.build();
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context);
if (resultCode == ConnectionResult.SUCCESS) {
mGcmNetworkManager.schedule(periodicTask);
} else {
Log.e("Deneme-App", "Hello - Tag");
}
Log.e("Deneme-App", "Hello - Tag - OK");
Log.e("Deneme-App","Starting Service ConnectivityListener");
}catch(Exception e){
Log.e("Deneme-App",e.toString());
}
} }
作业调度程序代码块
public class BestTimeService extends GcmTaskService {
private static final String TAG = "Deneme-App";
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
@Override
public int onRunTask(TaskParams taskParams) {
Context context=getApplicationContext();
if(!isMyServiceRunning(DenemeService.class))
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context,DenemeService.class));
}else{
context.startService(new Intent(context,DenemeService.class));
}
}
Log.i(TAG, "onRunTask");
switch (taskParams.getTag()) {
case "checkService":
Log.i(TAG, "checkService");
// This is where you need to perform the background tasks.
return GcmNetworkManager.RESULT_SUCCESS;
default:
Log.i(TAG, "FAILURE checkService");
return GcmNetworkManager.RESULT_FAILURE;
}
}
}
public class DenemeService extends Service {
Socket socket;
public DenemeService() {
Log.e("Deneme-App","Service Constuructor");
}
@Nullable
@Override
public IBinder onBind(Intent ıntent) {
Log.e("Deneme-App", "Service Started");
return null;
}
@Override
public void onRebind(Intent intent) {
Log.e("Deneme-App", "Service onRebind");
super.onRebind(intent);
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.e("Deneme-App", "Service onTaskRemoved");
super.onTaskRemoved(rootIntent);
}
@Override
public void onDestroy() {
Log.e("Deneme-App", "Service onDestroy");
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log.e("Deneme-App", "Service onUnbind");
return super.onUnbind(intent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_LONG).show();
return START_REDELIVER_INTENT;
}
@Override
public void onCreate() {
Log.e("Deneme-App", "Service onCreate");
super.onCreate();
}
}
Manifest.xml
<service
android:name=".BestTimeService"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
</intent-filter>
</service>
<service android:name=".DenemeService" />
<receiver
android:name=".BootReciever"
android:enabled="true"
android:exported="false"
android:label="BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
从Android API级别23开始,Android引入了两个新的节能功能,即Doze和App Standby,这对应用程序在后台连续运行提出了更多限制。具体来说,您可能需要使用前台服务,并在锁定屏幕或通知托盘上显示一条通知,以避免Android系统终止该服务
有关更多详细信息,请参阅此链接:。Os是否对调用的每项操作都授予您权限?那么在启动服务时调用哪个方法?否。我在问当你们启动服务时什么时候调用这个方法,试着使用意向服务,然后给我反馈