2016-07-28 109 views
-1

我有我開始使用的意圖,從一類是Android服務:機器人爲什麼我的服務的run()不工作

Intent i = new Intent(getActivity(), MyService.class); 
i.putExtra("Arrived_To_Destination","yes"); 
getActivity().startService(i); 

爲MyService代碼:

public class MyService extends Service { 

    String arrival_event; 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("hi","Inside3"); 
     arrival_event = intent.getStringExtra("Arrived_To_Destination"); 
     Log.d("hi","Inside0" + arrival_event); 
     WorkerThread dialogthread = new WorkerThread(arrival_event); 
     Log.d("hi","Inside1"); 
     dialogthread.start(); 
     Log.d("hi","Inside2"); 
     return Service.START_STICKY; 
    } 

    private class WorkerThread extends Thread { 
     String arrival_event; 

     public WorkerThread(String arrival_event) { 
     this.arrival_event = arrival_event; 
     } 

     @Override 
     public void run() { 
      Log.d("hi","Inside4" + arrival_event); 
      try { 
       Log.d("hi","Inside5" + arrival_event); 
       if(arrival_event.equalsIgnoreCase("yes")) { 
        Log.d("hi","Inside6"); 
        MyFragment mf = new MyFragment(); 
        Log.d("hi","Inside7"); 
        mf.showDialog(); 
       } 

      } catch (Exception e) { 
       logger.error("Error: ", e); 
      } 
     } 
    } 
} 

一旦該服務已啓動,我得到的日誌 -

Inside 0 
Inside 1 
Inside 2 
Inside 3 
Inside 4 

MyClass的

private void updateLocation(Child currentchild, Location location) { 
if (distancetodestination <= 100) { 
        // the destination reached; 100 is the 100metres, so if the child is within 100m, the arrival event is sent 
        logger.info("Child arrived"); 

        isAtDesination = true; 
        child_arrived = true; 
        MyApi.sendArrival(child); 

        } 
       } 
} 

問題是我沒有進入if聲明。在MyClass中,我宣稱child_arrivedpublic static boolean child_arrived;

一旦孩子到達,我將該值設置爲true。爲什麼MyService未執行if語句。

+1

的問題應該在你的'MyClass'。你在這裏沒有做任何事情。 – Sufian

+2

當這個MyClass.child_arrived標誌改變了嗎? –

+0

@Sufian我只是在我的服務中檢查它的價值。在MyClass中,當一個事件發生時(孩子到達),我將布爾值設置爲true – Mark023

回答

1

問題是代碼在單獨的threads這就是爲什麼不能通信這種方式,你可以通過然後標誌意圖一邊啓動服務或保存標誌值在shared preferences,然後在這裏檢查。

Intent intent = new Intent(this, MyService.class); 
intent.putExtra("Flag","0") 
startService(intent); 

MyService.java

public class MyService extends Service { 

    int flag; 
    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("hi","Inside0"); 

     flag = intent.getStringextra("Flag"); 

     WorkerThread dialogthread = new WorkerThread(flag); 
     Log.d("hi","Inside1"); 
     dialogthread.start(); 
     Log.d("hi","Inside2"); 
     return Service.START_STICKY; 
    } 
private class WorkerThread extends Thread { 

     int flag; 

     public WorkerThread(int flag) { 
       this.flag = flag; 
     } 

     @Override 
     public void run() { 
      Log.d("hi","Inside3"); 
      try { 
       Log.d("hi","Inside4"); 
       if(flag == 0) { 
        Log.d("hi","Inside5"); 
        MyFragment mf = new MyFragment(); 
        Log.d("hi","Inside6"); 
        mf.showDialog(); 
       } 

      } catch (Exception e) { 
       logger.error("Error : ", e); 
      } 
     } 
    } 
} 
+0

謝謝yu :)我會試試這個,讓你知道:) – Mark023

+0

它仍然不能正常工作:( – Mark023

+0

@ Mark023你可以用最新的代碼更新你的問題嗎? – Sufian

相關問題