2015-04-28 76 views
1

我的Android應用程序正在激活一個叫做'Activityservice。 在mainActivity:如何處理一個循環服務?

startService(new Intent(getBaseContext(),MyService.class)); 

,然後在服務:

 public int onStartCommand(Intent intent,int flage,int startId){ 

// Toast.makeText(this, "Yes please", Toast.LENGTH_LONG).show(); 

    Intent mIntent=new Intent(MyService.this,trackingActivity.class); 
    mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(mIntent); 

    return START_STICKY; } 

在trackingActivity結束此行被寫入(再次):

startService(new Intent(getBaseContext(),MyService.class)); 

這是創造了很多Services。有沒有更好的方式來創建一個後臺服務,總是重複自己,而不是每次創建一個新的Service

我試圖做Activity內while循環:

 while(true){ 
        Actions on activity 
        } 

,但沒有成功。

+0

根據我的回答,這不會創建許多服務。所以你不需要更好的方法 - 你每次都沒有創建一個新的服務。如果這不是重點,請進一步解釋問題。 –

+0

現在我明白了,謝謝理查德,我將採取這兩個答案,並結合他們,我需要一個綁定服務。 –

回答

1

Context.startService(Intent)不會爲每個呼叫創建新的Service

如果已經有匹配的服務正在運行,它將意圖傳遞給該運行服務,但不會每次都創建一個新服務。


看到Android開發者文檔爲Context.startService(Intent)

如果該服務尚未運行,它會被實例化和 開始(如果需要爲它創造的過程);如果它正在運行,那麼 它仍然在運行。

對此方法的每次調用都將導致相應的對目標服務的onStartCommand(Intent,int,int)方法的調用,其意圖在此給出。


有一個在Android開發文檔相似的信息有關Starting a Service

的startService()方法立即返回和Android系統 調用[當使用意圖開始服務]服務的onStartCommand()方法。如果服務不是 已經運行,系統首先調用onCreate(),然後調用 onStartCommand()。

...

多個請求啓動服務結果在多個 服務相對應的onStartCommand()的調用。但是,只有 一個請求停止服務(使用stopSelf()或stopService())是 停止它所需的。

+1

每次客戶端使用startService(Intent intent)啓動服務時,都會調用'onStartCommand()' - 所以這可能是OP認爲許多服務已啓動的原因。事實上,如果活動再次啓動服務,甚至可能會出現循環。 – Trinimon

+0

@Trinimon是正確的。這個方法每次都被調用,但是系統並不創建很多服務 - 這就是我在上面的答案中指出的。 –

+0

我雖然這是創建一個新的服務,因爲在活動一個XML文件附加,所以每次我使用服務,我看到一個彈出屏幕的結果,可以說我運行服務3次(當我通過USB輸入valuse服務被激活),因爲我在我的s3上按了後面的觸摸按鈕三次後,我看到所有3個屏幕,並在第四次看到我的主要活動。 –