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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Services,服務(wù)

2019-11-09 13:50:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

服務(wù)是andriod四大組件之一,主要作用于執(zhí)行耗時(shí)操作。與acticity一樣代表可執(zhí)行的程序。 但與acticity不同的是有用戶操作的界面,服務(wù)是不可見的。 服務(wù)分為本地服務(wù)與遠(yuǎn)程服務(wù),今天暫時(shí)講的是本地服務(wù)。

本地服務(wù)有四個(gè)生命周期: 創(chuàng)建**onCreate(), 銷毀onDestroy() , 綁定服務(wù)**onBind(只有在bindservices()才會(huì)調(diào)用此方法),onStartCommand(只有在啟動(dòng)服務(wù)的時(shí)候系統(tǒng)才會(huì)調(diào)用此方法 )。 services只能activity傳值到services里 注意在清單文件里的配置是:

<service android:name=".MyServices" android:exported="true"/>

創(chuàng)建本地服務(wù)需要?jiǎng)?chuàng)建一個(gè)類繼承services類然后重寫里面的幾個(gè)生命周期的方法代碼如下:

public class MyServices extends Service { @Nullable @Override public IBinder onBind(Intent intent) { Log.i("test","onBind"); return null; } @Override public void onCreate() { super.onCreate(); Log.i("test","onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); Log.i("test","onDestroy"); }}

需要注意的是不可在主線程里面執(zhí)行耗時(shí)操作,可以使用子線程或者intentservices

intentservices是services的子類,可在主線程里面執(zhí)行耗時(shí)操作并且內(nèi)部有一個(gè)任務(wù)隊(duì)列,并且會(huì)一次從任務(wù)隊(duì)列中取出任務(wù),然后調(diào)用onHandlerIntent()這個(gè)方法執(zhí)行任務(wù)。當(dāng)任務(wù)隊(duì)列中的所有任務(wù)都完成以后才會(huì)停止服務(wù)。

如果自己手動(dòng)停止服務(wù),intent services會(huì)立即銷毀但是它的工作線程不會(huì)立即退出。而是把當(dāng)前正在執(zhí)行的任務(wù)執(zhí)行完畢才會(huì)停止服務(wù),排隊(duì)中未執(zhí)行的任務(wù)將不再執(zhí)行

intentservices還可進(jìn)行傳值到activity里,不像services只能是activity傳值到services里

創(chuàng)建intent services與前面一樣但是繼承的是intentservices類代碼如下: 但是需要注意的是必須要?jiǎng)?chuàng)建一個(gè)有參的構(gòu)造函數(shù)和無(wú)參的構(gòu)造函數(shù)

public class MyServices2 extends IntentService { public MyServices2() { super(""); } public MyServices2(String name) { super(name); } @Override PRotected void onHandleIntent(Intent intent) { for (int i = 0; i <10 ; i++) { Log.i("test","i="+i); SystemClock.sleep(2000); } }}

在activity里啟動(dòng)服務(wù)需要用到的方法是startservices(),關(guān)閉則用stopservices或者stopself() 這兩者不同的是前者只能關(guān)閉手動(dòng)停止服務(wù),而后者是寫到子線程里并且能在任務(wù)完成時(shí)自動(dòng)停止服務(wù)。其中stop self有分為帶參的和不帶參的,不帶參的是當(dāng)?shù)谝粋€(gè)線程完成任務(wù)時(shí)就停止服務(wù),帶參的則會(huì)在所有線程都完成任務(wù)時(shí)才會(huì)停止服務(wù)

activity里的代碼:

public class MainActivity extends AppCompatActivity { private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this,MyServices2.class); } public void start(View view){ intent.putExtra("data","下載的路徑"); startService(intent); } public void stop(View view){ stopService(intent); }}

線程里的代碼:

@Override public int onStartCommand(Intent intent, int flags, int startId) { String data=intent.getStringExtra("data"); new MyThread(startId).start(); return super.onStartCommand(intent, flags, startId); } class MyThread extends Thread{ private int startId; public MyThread(int startId) { this.startId = startId; } @Override public void run() { super.run(); //耗時(shí)操作 for (int i = 0; i <10 ; i++) { Log.i("test","i="+i); SystemClock.sleep(1000); } //stopSelf();//當(dāng)?shù)谝粋€(gè)線程執(zhí)行完,就會(huì)停止服務(wù) //所有的線程都執(zhí)行完畢,才會(huì)停止服務(wù) stopSelf(startId); } }
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 务川| 大石桥市| 安乡县| 新建县| 白水县| 张家港市| 太仆寺旗| 云安县| 甘南县| 宜宾县| 柘城县| 永德县| 宁陵县| 洛阳市| 六盘水市| 汕尾市| 长治县| 新平| 七台河市| 德钦县| 龙井市| 定陶县| 隆回县| 瑞昌市| 嘉兴市| 饶河县| 沈丘县| 教育| 灵山县| 白朗县| 油尖旺区| 沅江市| 嘉善县| 庐江县| 鹤壁市| 鄯善县| 沂南县| 阿荣旗| 宁乡县| 清河县| 永寿县|