關(guān)于Service各種知識點總結(jié)

Service生命周期:
啟動模式:
1.Start方式:

啟動后在后臺單獨執(zhí)行邑雅,不給組件返回結(jié)果
調(diào)用onstartCommand,需要調(diào)用stopService才能停止service

2.Bind方式:

可與綁定的組件進行交互
Service可與多個組件綁定妈经,不再與任何綁定才會destroy.
Service不是新的線程淮野,也不是新的進程

  • 若您需要在Service中執(zhí)行較為耗時的操作(如播放音樂、執(zhí)行網(wǎng)絡(luò)請求等)吹泡,需要在Service中創(chuàng)建一個新的線程Thread還是使用Service?

看是否需要與用戶交互骤星,要交互用thread,不交互可用service爆哑。

  • IntentService默認(rèn)啟動子線程洞难,操作完成后無需調(diào)用stop,onHandleIntent()會自動調(diào)用該方法

  • 啟動service:
    Intent intent = new Intent(this,MyIntentService.class);
    與activity啟動方式類似,startService(intent);

  • 前臺service:
    前臺Service用于動態(tài)通知消息揭朝,如天氣預(yù)報队贱。該Service不易被kill。
    一個播放音樂的Service必須是前臺Service萝勤,只有這樣用戶才能確知其運行狀態(tài)

  • service調(diào)用的各種方法:


  • service連接回調(diào):


Service啟動方式

1.Service的第一種啟動方式露筒,采用start的方式開啟服務(wù)

1.定義一個類繼承Service
2.在Manifest.xml文件中配置該Service
3.使用Context的startService(Intent)方法啟動該Service
4.不再使用時,調(diào)用stopService(Intent)方法停止該服務(wù)

使用這種start方式啟動的Service的生命周期如下:
onCreate()--->onStartCommand() ---> onDestory()

特點:一旦服務(wù)開啟跟調(diào)用者(開啟者)就沒有任何關(guān)系了敌卓。
開啟者退出了慎式,開啟者掛了,服務(wù)還在后臺長期的運行趟径。
開啟者不能調(diào)用服務(wù)里面的方法瘪吏。

2.Service的第二種啟動方式,采用bind的方式開啟服務(wù)

1.定義一個類繼承Service
2.在Manifest.xml文件中配置該Service
3.使用Context的bindService(Intent, ServiceConnection, int)方法啟動該Service
4.不再使用時蜗巧,調(diào)用unbindService(ServiceConnection)方法停止該服務(wù)

使用這種start方式啟動的Service的生命周期如下:
onCreate() --->onBind()--->onunbind()--->onDestory()

特點:bind的方式開啟服務(wù)掌眠,綁定服務(wù),調(diào)用者掛了幕屹,服務(wù)也會跟著掛掉蓝丙。
綁定者可以調(diào)用服務(wù)里面的方法级遭。

啟動過程代碼:
public class MainActivity extends Activity {

    private MyConn conn;
    private Intent intent;
    private IMyBinder myBinder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //開啟服務(wù)按鈕的點擊事件
    public void start(View view) {
        intent = new Intent(this, MyService.class);
        conn = new MyConn();
        //綁定服務(wù),
        // 第一個參數(shù)是intent對象渺尘,表面開啟的服務(wù)挫鸽。
        // 第二個參數(shù)是綁定服務(wù)的監(jiān)聽器
        // 第三個參數(shù)一般為BIND_AUTO_CREATE常量,表示自動創(chuàng)建bind
        bindService(intent, conn, BIND_AUTO_CREATE);
    }

    //調(diào)用服務(wù)方法按鈕的點擊事件
    public void invoke(View view) {
        myBinder.invokeMethodInMyService();
    }

    private class MyConn implements ServiceConnection {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            //iBinder為服務(wù)里面onBind()方法返回的對象鸥跟,所以可以強轉(zhuǎn)為IMyBinder類型
            myBinder = (IMyBinder) iBinder;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
        }
    }
}

關(guān)于Service其它問題

  • IntentService與Service的區(qū)別

Service做耗時操作容易引起ANR丢郊,所以創(chuàng)造一個IntentService是處理異步請求的一個類,在IntentService內(nèi)有一個工作線程來處理耗時操作医咨,啟動IntentService的方式和啟動傳統(tǒng)的Service一樣枫匾,同時,當(dāng)任務(wù)執(zhí)行完后拟淮,IntentService會自動停止干茉,而不需要我們手動去控制或stopSelf()。

  • Service怎么保證在后臺不被殺死惩歉?

重寫onStartCommand()方法等脂,將flags設(shè)置START_STICKY,服務(wù)被殺死之后系統(tǒng)會重新創(chuàng)建服務(wù)撑蚌。

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        flags = START_STICKY;
        return super.onStartCommand(intent, flags, startId);
    }
  • 如何在service中彈出對話框

Service中可以彈出對話框。比如當(dāng)監(jiān)聽到電量變化搏屑,監(jiān)聽到接收短信争涌,用Service監(jiān)聽,然后在Service中彈出對話框辣恋。

AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
            alertDialog.setMessage("有新消息亮垫,是否查看?");
            alertDialog.setPositiveButton("否",
                    new DialogInterface.OnClickListener()
                    {
                        public void onClick(DialogInterface dialog, int which)
                        {
                        }
                    });
    
            alertDialog.setNegativeButton("是",
                    new DialogInterface.OnClickListener()
                    {
                        public void onClick(DialogInterface dialog, int which)
                        {
                        }
                    });
    
            ad = alertDialog.create();
            
            ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);  
            ad.setCanceledOnTouchOutside(false);//點擊外面區(qū)域不會讓dialog消失                               
            ad.show();

關(guān)鍵點是要給dialog添加setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)伟骨,類型是系統(tǒng)彈框饮潦。并加入系統(tǒng)彈框的權(quán)限。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末携狭,一起剝皮案震驚了整個濱河市继蜡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逛腿,老刑警劉巖稀并,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異单默,居然都是意外死亡碘举,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門搁廓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來引颈,“玉大人耕皮,你說我怎么就攤上這事◎。” “怎么了明场?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長李丰。 經(jīng)常有香客問我苦锨,道長,這世上最難降的妖魔是什么趴泌? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任舟舒,我火速辦了婚禮,結(jié)果婚禮上嗜憔,老公的妹妹穿的比我還像新娘秃励。我一直安慰自己,他們只是感情好吉捶,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布夺鲜。 她就那樣靜靜地躺著,像睡著了一般呐舔。 火紅的嫁衣襯著肌膚如雪币励。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天珊拼,我揣著相機與錄音食呻,去河邊找鬼。 笑死澎现,一個胖子當(dāng)著我的面吹牛仅胞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剑辫,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼干旧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妹蔽?” 一聲冷哼從身側(cè)響起椎眯,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讹开,沒想到半個月后盅视,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡旦万,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年闹击,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片成艘。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡赏半,死狀恐怖贺归,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情断箫,我是刑警寧澤拂酣,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站仲义,受9級特大地震影響婶熬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埃撵,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一赵颅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暂刘,春花似錦饺谬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至森缠,卻和暖如春拔鹰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辅鲸。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工格郁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人独悴。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像锣尉,于是被迫代替她去往敵國和親刻炒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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