2017-05-29 128 views
0

我有簡單的應用程序來測試android:進程屬性的服務。所以,我的服務是這樣的:服務與android:進程不啓動

public class MyService extends IntentService { 
    static final String TAG = "MyService"; 

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

    @Override 
    protected void onHandleIntent(Intent intent) { 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     doJob(); 
     return START_STICKY; 
    } 

    private void doJob() { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       Log.i(TAG,"job started"); 

       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       Log.i(TAG,"job stopped"); 

       stopSelf(); 
      } 
     }).start(); 
    } 
} 

我試圖從活動啓動服務如下:

findViewById(R.id.startServiceBtn).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startService(new Intent(getApplicationContext(),MyService.class)); 
      } 
     }); 

一切工作正常。現在我在清單中的服務聲明中添加了android:process =「:service」屬性。之後,服務不會啓動。那麼,爲什麼這樣,我應該在獨立的過程中更改啓動服務?

+0

你是如何檢查,如果你的服務運行? – F43nd1r

+0

這不是你的問題,但你使用意圖服務錯誤。你不應該在onStartCommand中爲intent服務做任何事情 - 它應該都在onHandleIntent中。通過在onStartCommand中執行它,您將打破IntentService內置的處理請求的方法。 –

+0

@ F43nd1r我使用Studio監視器選項卡在工作室中檢查它,服務應該啓動doJob()方法,將消息打印到logcat。如果我看到這些消息,那麼這意味着服務正在運行 – borune

回答

0

我認爲你必須做這個任務,即onHandleIntent()中的dowork()方法調用。因爲你的服務類擴展了Intent服務而不是Service。

public class MyService extends IntentService { 
static final String TAG = "MyService"; 

public MyService() { 
    super("MyService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
doJob(); 
} 

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


} 

private void doJob() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Log.i(TAG,"job started"); 

      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      Log.i(TAG,"job stopped"); 

      stopSelf(); 
     } 
    }).start(); 
} 

}

+0

你說得對,他錯誤地實現了它,但這不是他的問題 - 它會按照他寫的方式運行,它不會正確處理意圖。 –

+0

@Sandeep庫馬爾從onStartCommand替換doJob到onHandleIntent不幫助 – borune

0

哦對不起,這是愚蠢的錯誤 - 我必須選擇Android的顯示器選項卡新工藝)感謝所有