Service
Service是Android系統(tǒng)的后臺服務組件蒙保,適用于開發(fā)無界面、長時間運行的應用功能
特點
1)沒有用戶界面
2)比Activity的優(yōu)先級高,不會輕易被Android系統(tǒng)終止
3)即使Service被系統(tǒng)終止太伊,在系統(tǒng)資源恢復后Service也將自動恢復運行狀態(tài)
4)用于進程間通信(Inter Process Communication妻怎,IPC),解決兩個不同Android應用程序進程之間的調用和通訊問題
Service生命周期包括全生命周期搁痛、活動生命周期
onCreate()事件回調函數(shù):Service的生命周期開始长搀,完成Service的初始化工作
onStart()事件回調函數(shù):活動生命周期開始,但沒有與之對應的“停止”函數(shù)鸡典,因此可以近似認為活動生命周期也是以onDestroy()標志結束
onDestroy()事件回調函數(shù):Service的生命周期結束源请,釋放Service所有占用的資源
顯示啟動:在Intent中指明Service所在的類,并調用startService(Intent)函數(shù)啟動Service
final Intent serviceIntent = new Intent(this, RandomService.class);
startService(serviceIntent);
隱式啟動 :在注冊Service時彻况,聲明Intent-filter的action屬性
隱式啟動的代碼如下
final Intent serviceIntent = new Intent();
serviceIntent.setAction("edu.hrbeu.RandomService");
實現(xiàn)Service的最小代碼集
第1行到第3行引入必要包
第5行聲明了RandomService繼承android.app.Service類
在第7行到第9行重載了onBind()函數(shù)
onBind()函數(shù)是在Service被綁定后調用的函數(shù)谁尸,能夠返回Service的對象,在后面的內容中會詳細介紹
Service的最小代碼集并不能完成任何實際的功能纽甘,需要重載onCreate()良蛮、onStart()和onDestroy(),才使Service具有實際意義
?????Android系統(tǒng)在創(chuàng)建Service時悍赢,會自動調用onCreate()完成必要的初始化工作
在Service沒有必要再存在時背镇,系統(tǒng)會自動調用onDestroy(),釋放所有占用的資源
通過Context.startService(Intent)啟動Service時泽裳,onStart()則會被系統(tǒng)調用瞒斩,Intent會傳遞給Service一些重要的參數(shù)
注冊Service
在AndroidManifest.xml文件中注冊,否則涮总,這個Service根本無法啟動
AndroidManifest.xml文件中注冊Service的代碼如下
啟動Service
顯示啟動:在Intent中指明Service所在的類胸囱,并調用startService(Intent)函數(shù)啟動Service,示例代碼如下
final Intent serviceIntent = new Intent(this, RandomService.class);
startService(serviceIntent);
在Intent中指明啟動的Service在RandomSerevice.class中
隱式啟動:在注冊Service時瀑梗,聲明Intent-filter的action屬性
設置Intent的action屬性烹笔,可以在不聲明Service所在類的情況下啟動服務隱式啟動的代碼如下
final Intent serviceIntent = new Intent();
serviceIntent.setAction("edu.hrbeu.RandomService");
若Service和調用服務的組件在同一個應用程序中裳扯,可以使用顯式啟動或隱式啟動,顯式啟動更加易于使用谤职,且代碼簡潔若服務和調用
服務的組件在不同的應用程序中饰豺,則只能使用隱式啟動
停止Service
將啟動Service的Intent傳遞給stopService(Intent)函數(shù)即可,
示例代碼如下
stopService(serviceIntent);
在調用startService(Intent)函數(shù)首次啟動Service后允蜈,系統(tǒng)會先后調用onCreate()和onStart()
再次調用startService(Intent)函數(shù)冤吨,系統(tǒng)則僅調用onStart(),而不再調用onCreate()
在調用stopService(Intent)函數(shù)停止Service時饶套,系統(tǒng)會調用onDestroy()
無論調用過多少次startService(Intent)漩蟆,在調用stopService (Intent)函數(shù)時,系統(tǒng)僅調用onDestroy()一次