Android_6_Service
Service(服務)是安卓四大組件之一,是一個沒有用戶界面的在后臺運行執(zhí)行耗時操作的應用組件,其他應用組件能夠啟動Service囚灼,并且當用戶切換到另外的應用場景,Service將持續(xù)在后臺運行祭衩。Service(服務可以脫離前端UI執(zhí)行在安卓后臺,一般這樣的service把它叫做后臺service,同時service還可以與前端控件綁定運行一般稱為前臺service,這個的服務會更難被清理,另外一個組件能夠綁定到一個service與之進行交互(IPC機制)灶体,例如,一個service可能會處理網絡操作掐暮,播放音樂蝎抽,操作文件I/O或者與內容提供者(content provider)交互,所有這些活動都是在后臺進行路克。
Service生命周期
Service啟動有兩種方式,一種是startService,一種是bind,兩種啟動方式service的生命同期會有一定差異,在Service每一次的開啟關閉過程中樟结,只有onStart可被多次調用(通過多次startService調用)养交,其他onCreate,onBind瓢宦,onUnbind碎连,onDestory在一個生命周期中只能被調用一次。
注:圖片引用自博客http://blog.csdn.net/agods/article/details/7468431
定義Service的步驟
1.創(chuàng)建Service.class繼承自系統(tǒng)Service類復寫方法
public class ServiceDemo extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
2.在manifest文件中聲名服務,在application節(jié)點下添加
<service android:name=".ServiceDemo">
</service>
這里name屬性也可以是全類名,打點缺省應用包名
3.啟動service
Intent intent= new Intent(context,ServiceDemo.class);
context.startService(intent);
注意: 前臺Service如果20秒之內未結束就會出現(xiàn)ANR刁笙,后臺Service如果200秒之內未結束就會出現(xiàn)ANR,所以不建議在service里面做太過耗時操作
local service:
啟動一個前臺服務:
前臺服務顧名思意就是把服務在前臺上顯示出來,也就是把服務和一個前臺顯示的控件關聯(lián)在一起,這樣做會提高進程的優(yōu)先級避免進程被殺
復寫onStartCommand()方法
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand()");// 在API11之后構建Notification的方式
Notification.Builder builder = new Notification.Builder(this.getApplicationContext()); //獲取一個Notification構造器
Intent nfIntent = new Intent(this, MainActivity.class);builder.setContentIntent(PendingIntent.getActivity(this, 0, nfIntent, 0)) // 設置
PendingIntent.setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_large)) // 設置下拉列表中的圖標(大標)
.setContentTitle("下拉列表中的Title") // 設置下拉列表里的標題
.setSmallIcon(R.mipmap.ic_launcher) // 設置狀態(tài)欄內的小圖標
.setContentText("要顯示的內容") // 設置上下文內容
.setWhen(System.currentTimeMillis()); // 設置該通知發(fā)生的時間
Notification notification = builder.build(); // 獲取構建好的
Notificationnotification.defaults = Notification.DEFAULT_SOUND; //設置為默認的聲音
}
啟動一個后臺服務:
一般是注冊一個廣播,當接收到廣播時,在廣播中啟動服務
進程間通訊
remote service:
aidl(Android Interface Definition Language)
Android翻譯:Android interface definition language(aidl)