Service

一堕汞、什么是Service?

Service是Android的四大組件之一勺爱,它可以在后臺(tái)運(yùn)行一些用戶不可見的任務(wù)(比如播放音樂、下載)臼朗。它還可以在應(yīng)用退出以后繼續(xù)保持運(yùn)行邻寿。

二蝎土、怎么使用Service?

1.首先要繼承Service類得到一個(gè)子類视哑。
2.跟Activity一樣,需要在AndroidManifest.xml文件中注冊(cè)

<service android:name=".Serevice.MyService"/>

3.與啟動(dòng)Activity類似誊涯,我們可以使用Intent來啟動(dòng)Service挡毅,啟動(dòng)方法為startService();

Intent startIntent = new Intent(this, MyService.class);
startService(startIntent);

Service與Activity不一樣暴构,如果不主動(dòng)結(jié)束它的運(yùn)行跪呈,它會(huì)一直保持運(yùn)行段磨。所以我們使用stopService()停止Service的運(yùn)行。

Intent stopIntent = new Intent(this, MyService.class);
stopService(stopIntent);

三耗绿、Activity怎么與Service通信苹支?

可以使用bindService()方法將Activity與Service綁定,使用unbindService()解除綁定误阻。也可以使用bindService()方法來啟動(dòng)Service债蜜,而這種綁定方式啟動(dòng)的Service,只有解除所有綁定究反,Service才會(huì)銷毀寻定。

Intent bindIntent = new Intent(this, MyService.class);
bindService(bindIntent, connection, BIND_AUTO_CREATE);

其中connection聲明如下,其中onServiceConnected方法會(huì)在Service與Activity建立關(guān)聯(lián)的時(shí)候調(diào)用精耐,可以在該方法里啟動(dòng)需要Service執(zhí)行的任務(wù)并得到返回值狼速。onServiceDisconnected方法會(huì)在Service與Activity解除關(guān)聯(lián)的時(shí)候調(diào)用。

private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName name) {
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myBinder = (MyService.MyBinder) service;
            myBinder.startDownload();
        }
};

四卦停、Service生命周期

生命周期

五向胡、前臺(tái)Service

一般情況下,Service都是在后臺(tái)運(yùn)行沫浆,但是也可以讓它運(yùn)行在前臺(tái)捷枯。
由于Service的系統(tǒng)優(yōu)先級(jí)比較低,后臺(tái)Service容易在系統(tǒng)內(nèi)存不足的時(shí)候被殺死专执,而前臺(tái)Service則可以解決這一問題淮捆。
創(chuàng)建前臺(tái)service比較簡(jiǎn)單,在我們繼承自Service類的子類的onCreate()方法中新建一個(gè)Notification

public  void showNotification(Context context) {
        Notification notification = new NotificationCompat.Builder(context)
                /**設(shè)置通知左邊的大圖標(biāo)**/
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
                /**設(shè)置通知右邊的小圖標(biāo)**/
                .setSmallIcon(R.mipmap.ic_launcher)
                /**通知首次出現(xiàn)在通知欄本股,帶上升動(dòng)畫效果的**/
                .setTicker("通知來了")
                /**設(shè)置通知的標(biāo)題**/
                .setContentTitle("這是一個(gè)通知的標(biāo)題")
                /**設(shè)置通知的內(nèi)容**/
                .setContentText("這是一個(gè)通知的內(nèi)容這是一個(gè)通知的內(nèi)容")
                /**通知產(chǎn)生的時(shí)間攀痊,會(huì)在通知信息里顯示**/
                .setWhen(System.currentTimeMillis())
                /**設(shè)置該通知優(yōu)先級(jí)**/
                .setPriority(Notification.PRIORITY_DEFAULT)
                /**設(shè)置這個(gè)標(biāo)志當(dāng)用戶單擊面板就可以讓通知將自動(dòng)取消**/
                .setAutoCancel(true)
                /**設(shè)置他為一個(gè)正在進(jìn)行的通知。他們通常是用來表示一個(gè)后臺(tái)任務(wù),用戶積極參與(如播放音樂)或以某種方式正在等待,因此占用設(shè)備(如一個(gè)文件下載,同步操作,主動(dòng)網(wǎng)絡(luò)連接)**/
                .setOngoing(false)
                /**向通知添加聲音拄显、閃燈和振動(dòng)效果的最簡(jiǎn)單苟径、最一致的方式是使用當(dāng)前的用戶默認(rèn)設(shè)置,使用defaults屬性躬审,可以組合:**/
                .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS)
                .setContentIntent(PendingIntent.getActivity(context, 1, new Intent(context, MainActivity.class), PendingIntent.FLAG_CANCEL_CURRENT))
                .build();
        notification.flags = Notification.FLAG_SHOW_LIGHTS;
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        /**發(fā)起通知**/
        notificationManager.notify(0, notification);
    }

通過初始化Notification和調(diào)用它的展示方法棘街,這樣該Service就變成了前臺(tái)service。
Notification的setContentIntent方法的參數(shù)是一個(gè)PendingIntent,它可以讓用戶點(diǎn)擊通知時(shí)去執(zhí)行預(yù)設(shè)的任務(wù)承边,這里是打開MainActivity遭殉。
運(yùn)行該Service,可以看到系統(tǒng)通知欄出現(xiàn)了一個(gè)通知博助,點(diǎn)擊它會(huì)打開MainActivity险污。

六、什么是PendingIntent?

PendingIntent是一種特殊的Intent蛔糯。它跟intent的立即執(zhí)行不一樣拯腮;它的執(zhí)行不是立即的,是需要滿足某些條件后才執(zhí)行蚁飒。
通過PendingIntent典型的三個(gè)靜態(tài)方法可以得到其對(duì)象:

  • 打開到一個(gè)activity組件
public static PendingIntent getActivity(Context context, int requestCode,
            Intent intent, @Flags int flags)
  • 打開一個(gè)廣播組件
 public static PendingIntent getBroadcast(Context context, int requestCode,
            Intent intent, @Flags int flags)
  • 打開一個(gè)服務(wù)組件
public static PendingIntent getService(Context context, int requestCode,
            @NonNull Intent intent, @Flags int flags)

因?yàn)镻endingIntent自己攜帶了Context动壤,所以即使Intent所在的程序結(jié)束了,PendingIntent依然有效淮逻,可以在別的程序中被使用狼电。

七、遠(yuǎn)程Service

待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弦蹂,一起剝皮案震驚了整個(gè)濱河市肩碟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凸椿,老刑警劉巖削祈,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脑漫,居然都是意外死亡髓抑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門优幸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吨拍,“玉大人,你說我怎么就攤上這事网杆「危” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵碳却,是天一觀的道長(zhǎng)队秩。 經(jīng)常有香客問我,道長(zhǎng)昼浦,這世上最難降的妖魔是什么馍资? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮关噪,結(jié)果婚禮上鸟蟹,老公的妹妹穿的比我還像新娘。我一直安慰自己使兔,他們只是感情好建钥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著火诸,像睡著了一般锦针。 火紅的嫁衣襯著肌膚如雪荠察。 梳的紋絲不亂的頭發(fā)上置蜀,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天奈搜,我揣著相機(jī)與錄音,去河邊找鬼盯荤。 笑死馋吗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秋秤。 我是一名探鬼主播宏粤,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼灼卢!你這毒婦竟也來了绍哎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鞋真,失蹤者是張志新(化名)和其女友劉穎崇堰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩咖,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡海诲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檩互。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片特幔。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闸昨,靈堂內(nèi)的尸體忽然破棺而出蚯斯,到底是詐尸還是另有隱情,我是刑警寧澤饵较,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布溉跃,位于F島的核電站,受9級(jí)特大地震影響告抄,放射性物質(zhì)發(fā)生泄漏撰茎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一打洼、第九天 我趴在偏房一處隱蔽的房頂上張望龄糊。 院中可真熱鬧,春花似錦募疮、人聲如沸炫惩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽他嚷。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筋蓖,已是汗流浹背卸耘。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粘咖,地道東北人蚣抗。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓮下,于是被迫代替她去往敵國(guó)和親翰铡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Service是Android四大組件中與Activity最相似的組件讽坏,他們都代表可執(zhí)行的程序锭魔,Service與A...
    AndYMJ閱讀 1,806評(píng)論 0 3
  • 前言:本文所寫的是博主的個(gè)人見解,如有錯(cuò)誤或者不恰當(dāng)之處路呜,歡迎私信博主赂毯,加以改正!原文鏈接拣宰,demo鏈接 Serv...
    PassersHowe閱讀 1,415評(píng)論 0 5
  • 服務(wù)基本上分為兩種形式 啟動(dòng) 當(dāng)應(yīng)用組件(如 Activity)通過調(diào)用 startService() 啟動(dòng)服務(wù)時(shí)...
    pifoo閱讀 1,273評(píng)論 0 8
  • [文章內(nèi)容來自Developers] Service是一個(gè)可以在后臺(tái)執(zhí)行長(zhǎng)時(shí)間運(yùn)行操作而不提供用戶界面的應(yīng)用組件党涕。...
    岳小川閱讀 866評(píng)論 0 7
  • ![《黃金時(shí)代》劇照](file:///storage/emulated/0/QQBrowser/圖片收藏/201...
    張某某T閱讀 427評(píng)論 0 1