Android 小白 Service 入門

Service (服務(wù)) 屬于 Android 組件之一, 它可以運行在 App 后臺, 提供和該 App 相關(guān)的事情, 比如監(jiān)聽耳機孔的插拔, 和服務(wù)器保持長連接等. Service 的父類是Activity 父類的父類. 可以將服務(wù)看做是沒有界面的 Activity, Activity 是有界面的組件.

使用服務(wù)需要首先在清單文件中注冊, 它默認(rèn)運行在主線程, 在創(chuàng)建時不可以進行耗時操作. Android 系統(tǒng)規(guī)定, Activity 5s 沒有響應(yīng), Service 10s 沒有響應(yīng), 就會發(fā)生 ANR 錯誤.

服務(wù)和線程的區(qū)別

Android 系統(tǒng)運行時, 會盡量保存每一個運行的 App 進程. 內(nèi)存不夠用時, 會首先回收老進程; 當(dāng)內(nèi)存足夠時, 會率先恢復(fù)帶有服務(wù)的進程. 所以, 將 App 相關(guān)功能放在服務(wù)中, 在一定程度上能夠提高 App 的留存率.

Android 中進程的分類
  1. Visible Progress 可視進程, 可以看到抢野,但是不能直接交互;
  2. Service Process 進程中在后臺運行的服務(wù);
  3. Background Process 不可見葱椭;在后臺運行;
  4. Empty Process: 空進程狼犯;沒有服務(wù) 也沒有 activity 已經(jīng)銷毀
    它們的優(yōu)先級: 可視進程 > 服務(wù)進程 > 后臺進程 > 空進程. 當(dāng)內(nèi)存不足時, 首先回收優(yōu)先級較低的進程;
使用服務(wù)的兩種方式

1 啟動方式

采用啟動模式啟動的服務(wù), 在應(yīng)用退出后, 服務(wù)不會銷毀, 除非用戶通過設(shè)置中的引用管理關(guān)閉服務(wù).

    public void startService(View view) {
        Intent intent = new Intent();
        intent.setClass(this, MyService.class);
        startService(intent);
    }

    public void stopService(View view) {
        Intent intent = new Intent();
        intent.setClass(this, MyService.class);
        stopService(intent);
    }

2 綁定方式

采用綁定方式啟動的服務(wù), 隨著應(yīng)用退出而銷毀. 綁定服務(wù)能夠調(diào)用服務(wù)中的私有方法. 使用步驟如下:

定義服務(wù)

public class MyService extends Service {


    private class MyAgent extends Binder implements IService{

        @Override
        public void callMethodInService(String name, int money) {
            methodInService(name,money);
        }
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "服務(wù)命令執(zhí)行了", Toast.LENGTH_SHORT).show();
        return super.onStartCommand(intent, flags, startId);
    }

    MyAgent agent;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        agent = new MyAgent();
        return agent;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Toast.makeText(this, "解綁了服務(wù)", Toast.LENGTH_SHORT).show();
        agent = null;
        return super.onUnbind(intent);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this, "服務(wù)創(chuàng)建了", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "服務(wù)銷毀了", Toast.LENGTH_SHORT).show();
    }

    private void methodInService(String name, int money){
        Toast.makeText(this, "服務(wù)方法調(diào)用了", Toast.LENGTH_SHORT).show();

    }
}

定義服務(wù)接口

public interface IService {
    public void callMethodInService(String name, int money);
}

使用

    private MyConn conn;
    private IService agent;
    private class MyConn implements ServiceConnection{

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            agent = (IService) service;
            Toast.makeText(MainActivity.this, "服務(wù)綁定時調(diào)用 onServiceConnected ", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            agent = null;
            Toast.makeText(MainActivity.this, "服務(wù)解綁時調(diào)用 onServiceDisconnected ", Toast.LENGTH_SHORT).show();
        }
    }

    public void bindService(View view) {
        Intent intent = new Intent();
        intent.setClass(this, MyService.class);
        if (conn == null){
            conn = new MyConn();
            bindService(intent, conn, BIND_AUTO_CREATE);
        }
    }

    public void unBindService(View view) {
        if (conn != null){
            unbindService(conn);
            conn = null;
        }
    }

    public void callMethodInService(View view) {
       if (agent != null){
           agent.callMethodInService("黑豹", 200);
       }else {
           Toast.makeText(this, "請先綁定服務(wù)", Toast.LENGTH_SHORT).show();
       }
    }
混合開啟服務(wù)

既要通過開啟服務(wù), 讓服務(wù)一直運行在后臺; 同時又要調(diào)用服務(wù)中的方法, 稱為混合開啟服務(wù). 其使用要嚴(yán)格遵守以下流程:

  1. 開啟服務(wù)
  2. 綁定服務(wù)
  3. 調(diào)用服務(wù)中的方法
  4. 解綁服務(wù)
  5. 關(guān)閉服務(wù)

以上就是服務(wù)的簡單介紹翁逞,更多功能待項目中發(fā)現(xiàn)。

關(guān)注和喜歡都是對我的鼓勵和支持~
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趴腋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子论咏,更是在濱河造成了極大的恐慌优炬,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厅贪,死亡現(xiàn)場離奇詭異蠢护,居然都是意外死亡,警方通過查閱死者的電腦和手機养涮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門葵硕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贯吓,你說我怎么就攤上這事懈凹。” “怎么了悄谐?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵介评,是天一觀的道長。 經(jīng)常有香客問我爬舰,道長们陆,這世上最難降的妖魔是什么寒瓦? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮棒掠,結(jié)果婚禮上孵构,老公的妹妹穿的比我還像新娘。我一直安慰自己烟很,他們只是感情好颈墅,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雾袱,像睡著了一般恤筛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芹橡,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天毒坛,我揣著相機與錄音,去河邊找鬼林说。 笑死煎殷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腿箩。 我是一名探鬼主播豪直,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼珠移!你這毒婦竟也來了弓乙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤钧惧,失蹤者是張志新(化名)和其女友劉穎暇韧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浓瞪,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡懈玻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了乾颁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涂乌。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钮孵,靈堂內(nèi)的尸體忽然破棺而出骂倘,到底是詐尸還是另有隱情眼滤,我是刑警寧澤巴席,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站诅需,受9級特大地震影響漾唉,放射性物質(zhì)發(fā)生泄漏荧库。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一赵刑、第九天 我趴在偏房一處隱蔽的房頂上張望分衫。 院中可真熱鬧,春花似錦般此、人聲如沸蚪战。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邀桑。三九已至,卻和暖如春科乎,著一層夾襖步出監(jiān)牢的瞬間壁畸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工茅茂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捏萍,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓空闲,卻偏偏與公主長得像令杈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子进副,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,304評論 25 707
  • 【Android Service】 Service 簡介(★★★) 很多情況下这揣,一些與用戶很少需要產(chǎn)生交互的應(yīng)用程...
    Rtia閱讀 3,160評論 1 21
  • 2.1 Activity 2.1.1 Activity的生命周期全面分析 典型情況下的生命周期:在用戶參與的情況下...
    AndroidMaster閱讀 3,051評論 0 8
  • 你你你,總是這么的調(diào)皮 再美的鞋子也阻止不了你脫鞋的決心 米老鼠拖鞋在笑 唐老鴨拖鞋在睡覺 光著腳丫的天使啊 涼涼...
    沫之夏閱讀 200評論 0 0
  • 2018年春的第一場茶事 不疾不徐來了影斑。 無:放下给赞、空無、空寂矫户、專注 我:我執(zhí)片迅、我念、我思皆辽、我想 有:當(dāng)下柑蛇、靜思、...
    江清秋閱讀 565評論 2 3