就拿c#編程語言來講吧: java
用c#中建立一個windows服務很是簡單,與windows服務相關的類都在System.ServiceProcess命名空間下。 mysql
每一個服務都須要繼承自ServiceBase類,並重寫相應的啓動、暫停、中止等方法。 android
windows服務的相關信息是存放與註冊表中的,因此他能夠在不須要用戶登陸的狀況下自動運行,在c#中你不須要再直接向註冊表中添加信息了,c#提供了服務安裝類 ServiceProcessInstaller和ServiceInstaller來實現服務的安裝。 web
首先,用vs建立一個windows服務項目 sql
Program中只包含服務運行的相關信息 apache
Service1.cs就是咱們須要的服務類,與windows服務相關的基本操做大均可以在這裏找到,如:Start,Stop,Pause,Continue等,咱們要作的就是根據這些操做作不一樣的處理就能夠了。 編程
咱們先在服務Start和Stop時分別記錄一條信息到D盤 c#
雙擊項目中的Service.cs轉到服務設計界面,在空白處右鍵選擇「添加安裝程序」 windows
vs會自動建立一個默認名稱爲ProjectInstaller.cs的文件並轉到相應的設計界面 數組
默認添加兩個類 serviceProcessInstaller1和serviceInstaller1,第一個主要用來設置服務所屬帳戶,關係到服務的運行,第二個是服務信息描述,如:服務名、是否自動啓動等
右鍵serviceProcessInstaller1屬性,將Account屬性選擇爲LocalSystem
因爲windows服務不能經過雙擊直接運行,因此咱們須要藉助.net提供的InstallUtil.exe來安裝服務。
打開windows服務管理器就能看到咱們安裝的服務,默認服務安裝成功後不會馬上啓動,須要咱們手動啓動。
IntentService提供了在單個後臺線程運行操做的簡單結構。這容許它操做耗時操做,而不影響UI響應。一樣,IntentService也不影響UI生命週期事件,因此,它在某些可能關閉AsyncTask的狀況下,仍會繼續運行(實測在Activity的onDestory裏寫AsyncTask沒法運行)。
IntentService有以下限制:
1.它不能直接影響UI。要把結果反映給UI,須要發給Activity
2.工做請求會順序運行。若是一個操做未結束,後面發送的操做必須等它結束(單線程)
3.IntentService裏運行的操做沒法被中斷
然而,在大多數狀況下,IntentService是簡單後臺任務的首選方式。
本節展現瞭如何建立IntentService的子類,如何建立onHandleIntent()回調,如何在AndroidManifest.xml聲明IntentService。
建立IntentService
定義一個IntentService的子類,覆蓋onHandleIntent()方法:
提示:其餘Service正常的回調,像 onStartCommand()在IntentService裏會自動調用。在IntentService裏,應該避免覆蓋這些回調。
在AndroidManifest.xml裏定義IntentService
IntentService也是Service),須要在AndroidManifest.xml裏註冊。
android:name屬性指定了IntentService的類名。
note:<service>節點不能包含intent filter。發送工做請求的Activity使用明確的Intent,會指定哪一個IntentService。這也意味着,只有同一個app裏的組件,或者另外一個有相同user id的應用才能訪問IntentService。
如今你有了基礎的IntentService類,能夠用Intent對象發送工做請求。
建立發送工做請求傳給IntentService
建立一個明確的Intent,添加須要的數據,調用startService()發送給IntentService
提示:能夠在Activity or Fragment的任意位置發送工做請求。若是你須要先取到用戶輸入,你能夠在點擊事件或相似手勢的回調方法裏發送工做請求。
一旦調用了startService(),IntentService會在onHandleIntent()工做,OK。
Java編程語言建立Windows後臺案例:
打開myeclipse,打開敲代碼。
windows服務是一個運行在操做系統後臺的可執行程序(打開方式:win+r -> services.msc),咱們平常用到的apache、mysql、tomcat等的啓動和關閉都會封裝成一個windows服務,隨着計算機啓動而啓動,藏匿在後臺,不影響用戶的其它工做。
今天先分享一個入門級的java建立windows服務的例子。
1.打包成win服務的功能代碼LogService.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Logservice {
public static void main(String args[]){
Calendar cal = Calendar.getInstance();
String s = "f:\\"+new SimpleDateFormat("yyyyMMddHHmmss").format(cal.getTime())+".txt";
System.out.println(s);
File f = new File(s);
try {
FileOutputStream out = new FileOutputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
運行後在f:路徑下建立一個日期記事本。
2.下載JavaService (http://javaservice.objectweb.org/)下載後解壓便可。
3.執行建立win服務的命令。在cmd運行窗口,cd到JavaService的目錄,輸入JavaService.exe -install myService "%JAVA_HO
ME%"\jre\bin\client\jvm.dll -Djava.class.path="JAVA_HOME"\lib\tools.jar;F:\myec
lipse3\javaservice\bin -start Logservice
(其中,myService爲建立的服務名稱,%JAVA_HO
ME%"\jre\bin\client\jvm.dll爲jdk中jre的jvm虛擬機,F:\myec
lipse3\javaservice\bin爲我LogService.class的存在路徑,請你們根據本身的類文件進行修改。
需注意問題:JavaService 不支持C:Program Files中間的空格,因此找不到JVM;固儘可能使用"JAVA_HOME",而不要直接用jdk的路徑;使用%JAVA_HOME%時又必須在其上加雙引號才行,即"%JAVA_HOME%")
能夠執行服務啦,OK
adiOS