回答

2

如何與應用程序的第一個活動一起啓動Started Service?

致電startService(intent)onCreate()方法的第一個Activity

我有一個後臺服務。我希望它的生命週期獨立於應用程序活動。

要做到這一點,最好的辦法是爲Service創建PendingIntent,並註冊它的AlarmManager

Intent i = new Intent(this, LocationService.class); 
PendingIntent pi = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT);   
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
am.setInexactRepeating(AlarmManager.RTC_WAKEUP,0,60*60*1000, pi); /* start Service every hour. */ 

這將確保Service以固定的間隔週期開始,與是否用戶已經將應用程序帶到了前臺或沒有。

如何在Android應用程序啓動時啓動服務?

可以自動在應用程序啓動通過擴展Application類開始Service

public class MyApp extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startService(new Intent(this, NetworkService.class)); 
    } 

} 

和修改application標籤在你manifest

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:name="com.mycompanydomain.MyApp"> 

這工作,因爲Application類是應用程序啓動時要創建的第一批實體之一。無論啓動Activity是什麼,這將啓動Service

+0

謝謝Y.S.開始第一項活動的服務是我目前所做的。我正在尋找另一種方式,例如:以某種方式響應MAIN動作。 該場景是我所有的活動都使用該服務,爲該服務提供接口。該服務是一個網絡IO相關的,所以它必須保持活着。 – 2015-04-06 14:40:51

+0

那麼你所面臨的問題究竟是什麼?你在這裏無法實現什麼? – 2015-04-07 08:49:30

+0

這是應用程序設計的問題。如果我們可以聲明哪個服務啓動的方式與我們在清單中聲明要加載哪個活動的相同方式會更方便。現在,我指定一個活動作爲應用程序的入口點,並在那裏加載服務。但是如果我選擇另一項活動作爲切入點呢?剪切粘貼對我來說看起來不夠乾淨。 – 2015-04-07 15:40:05