2015-09-17 25 views
6

Bu benim Service numaralı düğmeyi alıyorum, Activity numaralı telefondan. Service çalışıyor iken Activity sola kaydırırsanız, çöküyor. Ayrıca manifestoda android:process=":remote"'u ekleyerek ayrı bir süreçte çalıştırmayı denedim ama yine de aynı.START_STICKY ile Android servisi, öldürme uygulamasında çöküyor

@Override 
public void onCreate(){ 
    super.onCreate(); 
    Log.d("Service", "Creating"); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    return null; 
} 

@Override 
public int onStartCommand (Intent intent, int flags, int startId) 
{ 
    super.onStartCommand(intent, flags, startId); 

    Log.d("Started", "Service"); 

    type = intent.getIntExtra("Type",-1); 
    mode = intent.getIntExtra("Mode",-1); 
    rank = intent.getIntExtra("Rank", -1); 
    latitude = intent.getDoubleExtra("Lat", -1.0); 
    longitude = intent.getDoubleExtra("Long", -1.0); 
    startTime = intent.getLongExtra("Start", 0); 
    endTime = intent.getLongExtra("End", 0); 

alıyorum hatadır: Bu Service çıkıyor oluyor

java.lang.RuntimeException: Unable to start service [email protected] with null: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2913) 
     at android.app.ActivityThread.access$2100(ActivityThread.java:148) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5312) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference 
     at com.routofy.routofytest.MyLocationService.onStartCommand(MyLocationService.java:89) 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2896) 
at android.app.ActivityThread.access$2100(ActivityThread.java:148) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5312) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
type = intent.getIntExtra("Type",-1);

üzerinde null işaretçi ben app öldürme işlemini öldürüyor anlamak olduğunu

ve Intentnull olmak. Ancak,Intent öldürülse bile Service'a teslim edilen bu tür durumlarla nasıl başa çıkılır? Hizmetin Activity'dan tamamen bağımsız olmasını istiyorum. Ayrıca bunun gibi çalıştırıyorum:

Intent pickIntent = new Intent(getApplicationContext(),MyLocationService.class); 
+0

Olası kopyası [NullPointerException nedir ve nasıl giderebilirim?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i- fix-it) – petey

cevap

3

Ben app öldürme sürecini ve amacını bu hizmet boş olduğu ortaya geliyor oluyor öldürme olduğunu anlıyoruz. Eğer bunu hizmet geçirilen nullIntent ile sistem tarafından yeniden olduğunu START_STICKY anlamı olduğuna inanıyorum onStartCommand() dönüş değerini yayınlanmıştır değil beri

.

Ama nasıl gibi davaları olduğunu Aktivite öldürse bile, niyet, hizmete teslim edilir.

Sadece demektir START_REDELIVER_INTENT bayrak, dönmek: "Sistem onStartCommand() döndükten sonra hizmet öldürürse, hizmet yeniden ve hizmet teslim edildi son niyetiyle onStartCommand() çağrı"

+0

Teşekkürler. İşe yarıyor. Ayrıca START_REDELIVER_INTENT kullanıyorsanız, hizmet çalışırken telefonu yeniden başlatırsam ne olacağına dair bir ipucu var mı? – gandharv09

+0

@newtoandroid Hiçbir şey, siz uygulamayı başlatacak şekilde, uygulamayı başlattığınızda. Servis önyüklemede hizmeti başlatmak isterseniz, [Android'de önyüklemede bir hizmet başlatmaya çalışıyorum] 'a bakın (http://stackoverflow.com/questions/2784441/trying-to-start-a-service -on-çizme-on-android? RQ = 1) – Onik