亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

安卓開發基礎篇——Anroid四大組件之Service

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

安卓開發四大組件之一——Service,可以理解為幕后工作者,音樂詞曲作家,哈哈。那么在開發中,音樂播放,下載文件,上載文件都用到service。Service,分為本地服務和遠程服務,區分是客戶端和服務端是否在同一進程當中,在為本地服務,不在為遠程服務,下面著重介紹本地服務,是安卓開發中最常用到的。啟動服務有兩種方式,startService和bindService;結束服務有兩種方式,startService對應stopService或stopSelf,bindService對應unBindService;startService和bindService;——兩者之間的區別:startService啟動服務后,客戶端和服務端再就沒有聯系了,也就是之間沒有通信,要結束服務,要不在啟動服務的地方調用stopService或者在服務中調用stopSelf;bindService啟動服務后,服務和客戶端是有交互的,他們之間是通過binder對象進行交互的,要結束服務,在客戶端調用unBindService,bindService在開發中是最常用的,所以著重要講解。

切記在使用service時,一定要在AndroidManifest.xml中進行配置,如何配置,Activity怎么配置,服務就怎么配置。例如項目中下載視頻服務的配置

  <!-- 下載視頻服務器 -->        <service android:name="com.suowei.appsuowei.service.UpVideoService"/>

1、startService:

生命周期:

onCreate ---> onStart ---> onDestory(Android 2.0以下版本中使用)

onCreate ---> onStartCommand ---> onDestory(Android2.0以上版本中使用)

當第一次調用startService后,先調用onCreate,再調用onStart或者onStartCommand,結束服務,調用onDestory,這里要特別注意的,如果已經啟動了該服務,如果再次調用startService,那么不會調用onCreate,直接調用onStart或onStartCommand。

特別注意的是:onStartCommand方法返回一個int值,這個值有四種:

(1)START_STICKY:如果service進程被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent對象。隨后系統會嘗試重新創建service,由于服務狀態為開始狀態,所以創建服務后一定會調用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那么參數Intent將為null。(2)START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執行完onStartCommand后,服務被異常kill掉,系統將會把它置為started狀態,系統不會自動重啟該服務,直到startService(Intent intent)方法再次被調用;。(3)START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand后,服務被異常kill掉,系統會自動重啟該服務,并將Intent的值傳入。(4)START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保證服務被kill后一定能重啟。2、bindService:生命周期:bindService時:onCreate ---> onBindunBindService時:onUnBind ---> onDestory現在分步講解:在調用bindServcie時,要傳入三個參數
this.bindService(intent, conn, Context.BIND_AUTO_CREATE);	第一個參數intent為意圖,用的滾瓜爛熟了吧
Intent intent=new Intent(this,UpVideoService.class);第二個參數conn為實現了服務鏈接接口(ServiceConnection)的類的對象
PRivate class UpVideoConnection implements ServiceConnection{		@Override		public void onServiceConnected(ComponentName name, IBinder service) {		}		@Override		public void onServiceDisconnected(ComponentName name) {}	}第一個方法在啟動服務后鏈接上服務調用,第二個為斷開服務鏈接時調用,大家注意,在第一個方法中傳入了一個Ibinder接口變量,這個變量就是客戶端與服務進行通信的橋梁紐帶,客戶端與服務端要通信,必須要拿到Service對象,才能調用Service中的公共方法,在android中的Service使用onBind的方法綁定服務時,返回一個實現IBinder接口的對象,所以在Service對象內部有一個Binder對象并返回,在這個對象中,寫一個方法得到該Service,這樣在上面的onServiceConnected中返回一個binder對象,用這個對象拿到Service對象,這樣就可以隨意調用Servcie中的公共方法了,實現了客戶端有服務器端的通信
	
@Override	public IBinder onBind(Intent intent) {		return new VideoBinder;	}
上面這個方法是用來返回Binder對象的
那么現在在服務里面寫一個類(在這個類中寫一個公共方法,getService,返回值為該服務)
public class VideoBinder extends Binder{		public UpVideoService getService(){			return UpVideoService.this;		}	}那么現在就把這個類的對象進行返回,把null改為VideoBinder對象,
public IBinder onBind(Intent intent) {		return new VideoBinder();}那么這樣,在客戶端返回的Binder對象,調用自己的方法,就獲取到了Service,接下來想怎么操作Service中的方法就看你的需要了。3、IntentService這家伙也得講解下,不然學員又混淆了,首先IntentService是Service的子類,那么他就擁有Service所有的屬性,既然是子類,那肯定有自己獨特的好用之處了。在講解這個IntentService之前,學員必須搞清一個問題,Service與Activity運行在不在同一個線程當中,答案是默認情況下他們都在進程的主線程中,哈哈,為了防止服務訪問耗時操作或者線程阻塞,導致ANR,必須要新開線程,那么不得不在Service中編寫耗時操作或者邏輯時,引入了IntentService,在intentService中,已經為你新開了一個線程,所以程序員在不必要新開線程了,而在IntentService中,只提供了一個方法
protected abstract void onHandleIntent(Intent intent);這是一個抽象方法,要實現必須要重寫了,通過查閱源代碼,IntentService是通過Handler looper message的方式實現了一個多線程的操作,同時耗時操作也可以被這個線程管理和執行,同時不會產生ANR的情況。說來說去,大家記住嘍,一代比一代永遠強。附上IntentService源碼,有興趣的可以看看,剛學習的不建議看,到此為止
private final class ServiceHandler extends Handler {      public ServiceHandler(Looper looper) {          super(looper);      }        @Override      public void handleMessage(Message msg) {          onHandleIntent((Intent)msg.obj);          stopSelf(msg.arg1);      }  }    /**  * Creates an IntentService.  Invoked by your subclass's constructor.  *  * @param name Used to name the worker thread, important only for debugging.  */  public IntentService(String name) {      super();      mName = name;  }    /**  * Sets intent redelivery preferences.  Usually called from the constructor  * with your preferred semantics.  *  * <p>If enabled is true,  * {@link #onStartCommand(Intent, int, int)} will return  * {@link Service#START_REDELIVER_INTENT}, so if this process dies before  * {@link #onHandleIntent(Intent)} returns, the process will be restarted  * and the intent redelivered.  If multiple Intents have been sent, only  * the most recent one is guaranteed to be redelivered.  *  * <p>If enabled is false (the default),  * {@link #onStartCommand(Intent, int, int)} will return  * {@link Service#START_NOT_STICKY}, and if the process dies, the Intent  * dies along with it.  */  public void setIntentRedelivery(boolean enabled) {      mRedelivery = enabled;  }    @Override  public void onCreate() {      // TODO: It would be nice to have an option to hold a partial wakelock      // during processing, and to have a static startService(Context, Intent)      // method that would launch the service & hand off a wakelock.        super.onCreate();      HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");      thread.start();        mServiceLooper = thread.getLooper();      mServiceHandler = new ServiceHandler(mServiceLooper);  }    @Override  public void onStart(Intent intent, int startId) {      Message msg = mServiceHandler.obtainMessage();      msg.arg1 = startId;      msg.obj = intent;      mServiceHandler.sendMessage(msg);  }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人高潮免费观看精品| 国产精品99久久久久久久久久久久| 69久久夜色精品国产7777| 在线观看欧美www| 日韩精品高清在线观看| 欧美国产一区二区三区| 欧美高清视频在线播放| 九九热精品视频| 国产成人久久精品| 欧美性xxxxxxx| 91免费国产网站| 久久露脸国产精品| 欧美插天视频在线播放| 一本大道久久加勒比香蕉| 国产亚洲精品成人av久久ww| 国产一区二区三区高清在线观看| 日韩免费观看在线观看| 亚洲精品综合精品自拍| 97久久久久久| 亚洲直播在线一区| 激情成人中文字幕| 国产一区红桃视频| 国产精品直播网红| 亚洲电影免费观看高清| 久久精品美女视频网站| 欧美高清视频一区二区| 久久视频免费在线播放| 日韩中文字幕视频在线观看| 欧美亚洲日本黄色| 国产欧美在线看| 亚洲毛片一区二区| 91欧美精品午夜性色福利在线| 国产suv精品一区二区三区88区| 不卡av在线网站| 欧美www视频在线观看| 中文字幕欧美亚洲| 青青久久av北条麻妃黑人| 欧美在线激情视频| 欧美激情奇米色| 日韩高清av一区二区三区| 欧美成人精品在线播放| 久久久国产一区二区三区| 成人激情视频免费在线| 亚洲欧美国内爽妇网| 国产91精品黑色丝袜高跟鞋| 在线播放国产一区中文字幕剧情欧美| 亚洲精品久久久久久下一站| 欧美性资源免费| www日韩中文字幕在线看| 国产精品亚洲美女av网站| 777777777亚洲妇女| 欧美黑人性猛交| 俺去了亚洲欧美日韩| 日韩激情av在线免费观看| 国产精品久久久久久婷婷天堂| 亚洲大尺度美女在线| 精品久久久久久亚洲精品| 国内成人精品一区| 精品综合久久久久久97| 欧美成人午夜影院| 欧美午夜精品久久久久久浪潮| 欧洲精品毛片网站| 黑人巨大精品欧美一区免费视频| 26uuu日韩精品一区二区| 国产精品777| 亚洲一区亚洲二区亚洲三区| 91中文字幕一区| 国产成人精品亚洲精品| 亚洲欧美在线播放| 国产脚交av在线一区二区| 久久香蕉国产线看观看av| 欧美—级a级欧美特级ar全黄| 国产精品日日做人人爱| 韩日精品中文字幕| 国产精品视频一区国模私拍| 欧美日韩国产丝袜美女| 精品国内亚洲在观看18黄| 亚洲女人被黑人巨大进入| 久久久99久久精品女同性| 亚洲成人在线视频播放| 国产91亚洲精品| 日韩在线精品视频| 欧美电影免费在线观看| 欧美性69xxxx肥| 色噜噜国产精品视频一区二区| 成年无码av片在线| 日韩亚洲第一页| 亚洲淫片在线视频| 国产精品r级在线| 欧美性猛交xxxx富婆| 日本韩国欧美精品大片卡二| 91干在线观看| 一个人www欧美| 精品国产91久久久| xvideos成人免费中文版| 亚洲色图18p| 欧美日韩精品在线| 在线观看视频99| 久久精品亚洲热| 欧美高清自拍一区| 成人综合国产精品| 欧美精品videosex极品1| 久久天天躁日日躁| 一本色道久久88综合日韩精品| 91精品国产91久久久久久| 久热爱精品视频线路一| 欧美—级a级欧美特级ar全黄| 成人写真视频福利网| 欧美视频专区一二在线观看| 亚洲香蕉av在线一区二区三区| 91在线观看免费观看| 欧美日产国产成人免费图片| 青青久久av北条麻妃海外网| 欧美另类精品xxxx孕妇| 欧美成人第一页| 久久亚洲欧美日韩精品专区| 成人激情视频在线| 国产va免费精品高清在线观看| 中文字幕精品一区久久久久| 亚洲女人天堂网| 亚洲白拍色综合图区| 欧美激情一级二级| 91香蕉嫩草影院入口| 久久中文字幕国产| 亚洲色图欧美制服丝袜另类第一页| 亚洲精品一二区| 最近2019年日本中文免费字幕| 欧美午夜久久久| 亚洲欧美一区二区三区情侣bbw| 国产精品自产拍高潮在线观看| 久久成人国产精品| 国产精品免费一区二区三区都可以| 97在线观看免费| 久热国产精品视频| 亚洲精品电影网在线观看| 日韩欧亚中文在线| 久久在线观看视频| 超碰97人人做人人爱少妇| 精品国产31久久久久久| 久久婷婷国产麻豆91天堂| 国产69精品99久久久久久宅男| 中文字幕免费精品一区高清| 中文字幕精品一区久久久久| 国内精品久久久久久久久| 亚洲性无码av在线| 国产精品久久久久久久app| 另类专区欧美制服同性| 亚洲第一视频在线观看| 成人妇女免费播放久久久| 国产精品大片wwwwww| 国产精品吴梦梦| 草民午夜欧美限制a级福利片| 色噜噜狠狠色综合网图区| 亚洲欧美国产高清va在线播| 国产噜噜噜噜噜久久久久久久久| 亚洲区在线播放| 91牛牛免费视频| 欧美精品在线播放| 久久久久久av| 中文字幕亚洲字幕| 精品成人久久av| 91精品视频在线免费观看| 国产69精品99久久久久久宅男| 日韩欧美在线一区|