2015-08-28 20 views
7

Bazı kodları her gün (her 24 saatte) çalıştırmak istiyorum. Sorun, kullanıcının uygulamayı açmamasıdır. Uygulama açık olmadığında kod nasıl çalıştırılır?Uygulama açık olmadığında her gün kodu çalıştır

+3

http://stackoverflow.com/questions/2333680/android-schedule-action [android alarm ayarlama ait – nKn

+0

olası yinelenen belirli günlerde yönetici] (http://stackoverflow.com/questions/5715940/setting-android-alarm-manager-on-certain-days) – Ankit

cevap

10

şunlardır:

  1. JobScheduler

(Yalnızca yukarıdaki API 21 veya için) Android bu sınıfa ekledi Buradaki belgeler için API 21, link'dur.

  1. JobSchedulerCompat - API 11 veya Kütüphaneden here ilgili her şeyi bulabilirsiniz

yukarıda JobScheduler kütüphanesinin backport.

  1. Kullanım alarmı yöneticisi işlemek için periyodik görev

Ayrıca periyodik görevi zamanlamak için AlarmManager kullanabilirsiniz. Bunu uygulamak için tam bir makale here yayınlanmıştır.

  1. Periyodik görevi zamanlamak için GCM (Google Cloud Messaging) Ağ Yöneticisi'ni kullanın.

Bunu uygulamak için bu belgelere link bir göz atabilirsiniz.

GCM Ağ Yöneticisi kullanılarak periyodik Görev için

Örnek proje düzeyi build.gradle içinde bağımlılık ekleyin.

compile 'com.google.android.gms:play-services-gcm:7.5.0' 

tezahür hizmet beyan GcmTaskService

public class BackgroundTaskHandler extends GcmTaskService { 

    public BackgroundTaskHandler() { 
    } 

    @Override 
    public int onRunTask(TaskParams taskParams) { 
     //Your periodic code here 
    } 
} 

kadar uzanır bir java sınıf oluşturun.xml

<service 
     android:name=".BackgroundTaskHandler" 
     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> 

Şimdi herhangi sınıftan periyodik görev zamanlama olarak: -

String tag = "periodic"; 

    GcmNetworkManager mScheduler = GcmNetworkManager.getInstance(getApplicationContext()); 

    long periodSecs = 60L;// 1 minute 

    PeriodicTask periodic = new PeriodicTask.Builder() 
      .setService(BackgroundTaskHandler.class) 
      .setPeriod(periodSecs) 
      .setTag(tag) 
      .setPersisted(true) 
      .setUpdateCurrent(true).setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_CONNECTED) 
      .build(); 
    mScheduler.schedule(periodic); 
1

planlanan işlemleri uygulamak için yepyeni bir yol google yeni eklenen (o kadar) olmuştur sdk seviyesinde 21.

dönemsel görevleri gerçekleştirmek için daha basit (ve backported) yolu edinilebilir job scheduler kullanmaktır oyun hizmetleri: network manager. Adına rağmen, ağ ile ilgili olmayan görevleri zamanlamak yararlıdır.

Kontrol

Program bakılmaksızın ağ ve cihaz şarj durumlarının periyodik bir görev

bölüm. Eğer çeşitli yollar ve bazıları kullanabilir arka plan periyodik görevi çalıştırmak için android olarak

+0

JobScheduler'ın 11 veya daha yüksek sürümlerinde çalışacağını sanmıyorum. Belgelere göre API 21'e eklenmiştir. –

+0

Evet, yazım hatası oldu. Değişecek, teşekkürler. – fedepaol

İlgili konular