国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Service的使用

2019-11-09 18:18:50
字體:
來源:轉載
供稿:網友

Service寫起來步驟有些多,而且有的寫錯了就不會有效果,所以我整理一下,以后自己看著能好想起來

   Service是Android四大組件之一,主要為了程序退出后仍然可以存在.但是Service實際運行在主線程,請不要做太耗時的操作,有耗時操作可以在Service中再建一個子線程來完成

那么來寫一下Service的基本使用方法吧

        首先我們需要新建一個類來繼承Service     然后必須在AndroidManifest中注冊,與activity同級

public class NewService extends Service{    @Nullable    @Override    public IBinder onBind(Intent intent) {        return null;    }}寫完直接復寫出來的方法是onBind(),這個方法很重要,不過返回值暫時為null

在這時我們就要了解一下Service的生命周期了,Service的生命周期有兩種,而這是由它的啟動方式決定的.

兩種啟動方式分別為.context.startService()和  context.bindService()第一種是直接開始,這一種服務可以在程序結束后繼續運行

第二種是將服務與組件(比如Activity)綁定,程序結束時必須解除綁定,不然會報錯,單純被綁定的服務在綁定的組件結束時也會結束,但是綁定的服務可以獲得一個binder對象,以此來調用服務中的方法,對服務進行操作,如音樂播放器     不過Service是可以同時被start和bind的

 那么我們綁定服務時獲取的Ibinder對象就是我們復寫的onBind方法的返回值,但是服務中現在沒有Ibinder對象,我們需要在服務中創建一個類繼承自Binder

并且在這個類中寫我們希望操作服務做的方法   比如我這里傳入了發短信的數據,在send==true的時候,我會在onCreate中進行發短信的操作(我要做的是延時發送,所以沒有把所有操作放在Binder中)

public class MyBinder extends Binder {    public void sendmsg(int time, String content, String num) {        time1 = time;        content1 = content;        num1 = num;        send = true;    }}這時候我們有了一個MyBinder內部類,但是還沒有一個對象 so我們要實例化一個對象
PRivate MyBinder myBinder;

       然后我們要復寫onCreate方法 onCreate方法是Service的兩種生命周期的第一個方法,一定會執行,并且只執行一次

會變化的變量初始化操作不要寫在上面,寫在生命周期中

  然后我們在onCreate中初始化對象  并且將onBind方法中的返回值改為這個對象(這一步一定不要忘)

@Overridepublic void onCreate() {    super.onCreate();    myBinder = new MyBinder();這時我們有了binder對象,有了binder類中我們要做的操作,并且已經注冊了,那么我們服務這個類的所有操作就完成了,接下來我們要找到組件來綁定和使用它.

首先我們需要一個連接服務的對象  和一個對服務進行操作的binder對象(這個對象由Service提供)   還有一個Intent(用于啟動服務,兩種啟動方式都需要)

private ServiceConnection serviceConnection;	

private MyService.MyBind myBind;

private Intent start;

start = new Intent(this, NewService.class);

在onCreate中初始化的時候會直接復寫兩個方法

serviceConnection = new ServiceConnection() {    /**     * 當服務連接成功的時候會回調--有坑    Secveice中的bind返回值為空時不調用此方法     * @param componentName     * @param iBinder     */    @Override    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {        Log.e(TAG, "onServiceConnected:-------- ");        //將onbind方法的返回值,賦值到myBinder上        myBind = (NewService.MyBind) iBinder;    }    /**     * 當服務,被殺死時會回調,例如,內存不夠被干掉     * @param componentName     */    @Override    public void onServiceDisconnected(ComponentName componentName) {        Log.e(TAG, "onServiceDisconnected:--------------------- ");    }};

這時候我們還沒有啟動Service

Service 的startService和stopService需要一個Intent       綁定服務需要一個Intent ,一個連接服務對象,還有一個flags(這個我一直是選Service.BIND_AUTO_CREATE)

服務解除綁定需要 一個連接服務對象(只要綁定過,那么這個Activity退出時必須做的)          當既Start又bind的時候我們需要既stop又unbind

startService(start);

stopService(start);
//綁定服務bindService(start, serviceConnection, Service.BIND_AUTO_CREATE);
//解綁服務unbindService(serviceConnection);

我們只有在綁定服務后才可以使用binder

使用很簡單

myBind.sendmsg(1,"這是一條延時發送的短信,延時一秒","88888");

這樣我們就可以與Service進行交互了

-------------------------------------------------------------------底下有的是別的網站摘下來的--------------------------------------------------------------------------------------------------------

重寫生命周期的回調方法

onCreate()何時:首次創建服務時。注意:若服務已在運行,則不會調用此方法。onDestroy()何時:當服務不再使用且將被銷毀時。作用:清理所有資源,如線程、注冊的偵聽器、接收器等。 注意:這是服務接收的最后一個調用。int onStartCommand(Intent intent, int flags, int startId)何時:當另一個組件調用startService()請求啟動服務時。參數:intent:startService()啟動服務時傳入的Intent;startId:唯一id標識此次服務的啟動請求。返回值:描述系統應該如何在服務終止的情況下繼續運行服務。IBinder onBind(Intent it)何時:當另一個組件調用bindService()與服務綁定時。返回值:供客戶端與服務進行通信。
/** * Created by dllo on 17/1/16. * 要使用服務,需要先建立一個類,繼承Service抽象類 * 實現方法 * 還要去Manifest文件中注冊一下 *//** * 如何與服務進行交換 * 推薦使用Binder形式 * 如何使用Binder * 第一步: 建立一個MyService的內部類Mybinder類,繼承Binder * 第二步: 聲明一個成員的MyBinder對象,在服務的onCreate方法中 *                                對MyBinder初始化 * 第三步: 將這個MyBinder對象,作為OnBind方法的返回值返回 * 第四步: 在與服務綁定的類中聲明一個MyBinder的成員變量 *    在OnServiceConnected回調中對該成員變量進行賦值(ServiceConnection 中的復寫方法) * 這樣,服務中的myBinder對象就被傳遞到了綁定服務的淚中 * 通過操作該myBinder對象,調用該MyBinder類中的各種方法 *  就可以操作MyService中的各種屬性 */

   當Service已經被一個Activity綁定時,另一個Activity綁定時不會走onBind方法,但會獲得一個binder,這個binder是最開始綁定時返回的binder,存在第三方中,再有綁定的就直接把binder塞給它


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄龙县| 虎林市| 雅江县| 石泉县| 临高县| 泾川县| 喀喇| 三原县| 莱芜市| 长顺县| 抚远县| 科技| 米易县| 驻马店市| 水城县| 理塘县| 宜兰市| 安乡县| 嵊泗县| 密云县| 田阳县| 榆社县| 新郑市| 察隅县| 上虞市| 清原| 乌审旗| 阳东县| 安康市| 抚顺县| 铜山县| 武川县| 额尔古纳市| 德昌县| 吴旗县| 台东县| 全椒县| 彭山县| 安西县| 观塘区| 玉山县|