Keeping a background service alive on Android

后端 未结 3 593
名媛妹妹
名媛妹妹 2021-01-23 06:22

In reference to Accelerometer seems to only work for a few seconds?

I\'m using the BOOT_COMPLETED broadcast event to call the following:

public class OnB         


        
相关标签:
3条回答
  • 2021-01-23 06:41

    You need to use a Partial Wakelock with the service. If your service is interactive with the user, you might consider making the service foreground.

    This is a working example for a Partial Wakelock:

    Use this when service is started:

        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock cpuWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        cpuWakeLock.acquire();
    

    When the service is stopped, do call cpuWakeLock.release();

    imports android.support.v4.content.WakefulBroadcastReceiver which Android Studio is telling me doesn't exist.

    You need to import the support library for that.

    0 讨论(0)
  • 2021-01-23 06:47

    To do the trick use JobScheduler and JobService which allow you to execute code periodically.

    First create a class that extends JobService, then implement required methods and add your service code/start another service from within the JobService onStartJob() method.

    Here's an example for executing a JobService operation periodically:

    ComponentName serviceComponent = new ComponentName(context, yourJobService.class);
    JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent);
    builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); 
    builder.setRequiresDeviceIdle(false); 
    builder.setRequiresCharging(false); 
    builder.setPeriodic(60000); // <<<<----  60 seconds interval
    
    JobScheduler jobScheduler = (JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
    jobScheduler.schedule(builder.build());
    

    You can find more info here: https://developer.android.com/reference/android/app/job/JobService.html

    Good luck!

    0 讨论(0)
  • 2021-01-23 06:53

    All you have to do to have a service that is constently alive is:

    <!-- BackGroundService Service -->
        <service
            android:name="com.settings.BackgroundService"
            android:enabled="true"
            android:exported="false"
            android:process=":my_process" />
    

    2) onStartCommand should return:

     return Service.START_STICKY;
    

    and that's all buddy after I Start the service from the main activity it is on for the whole day/

    0 讨论(0)
提交回复
热议问题