Android 安卓服务毁了自己

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

我有一个完整的接收器。此接收器在手机启动时启动服务。但当接收器工作并启动服务时,仅在onDestroy模块上运行服务。我不知道为什么。我创建了一个JobScheduler并检查服务可用性,然后重新运行服务,操作系统每次都会销毁

启动接收器是

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是否对调用的每项操作都授予您权限?那么在启动服务时调用哪个方法?否。我在问当你们启动服务时什么时候调用这个方法,试着使用意向服务,然后给我反馈