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

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

Services,服務

2019-11-09 14:35:17
字體:
來源:轉載
供稿:網友

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

本地服務有四個生命周期: 創建**onCreate(), 銷毀onDestroy() , 綁定服務**onBind(只有在bindservices()才會調用此方法),onStartCommand(只有在啟動服務的時候系統才會調用此方法 )。 services只能activity傳值到services里 注意在清單文件里的配置是:

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

創建本地服務需要創建一個類繼承services類然后重寫里面的幾個生命周期的方法代碼如下:

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"); }}

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

intentservices是services的子類,可在主線程里面執行耗時操作并且內部有一個任務隊列,并且會一次從任務隊列中取出任務,然后調用onHandlerIntent()這個方法執行任務。當任務隊列中的所有任務都完成以后才會停止服務。

如果自己手動停止服務,intent services會立即銷毀但是它的工作線程不會立即退出。而是把當前正在執行的任務執行完畢才會停止服務,排隊中未執行的任務將不再執行

intentservices還可進行傳值到activity里,不像services只能是activity傳值到services里

創建intent services與前面一樣但是繼承的是intentservices類代碼如下: 但是需要注意的是必須要創建一個有參的構造函數和無參的構造函數

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里啟動服務需要用到的方法是startservices(),關閉則用stopservices或者stopself() 這兩者不同的是前者只能關閉手動停止服務,而后者是寫到子線程里并且能在任務完成時自動停止服務。其中stop self有分為帶參的和不帶參的,不帶參的是當第一個線程完成任務時就停止服務,帶參的則會在所有線程都完成任務時才會停止服務

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(); //耗時操作 for (int i = 0; i <10 ; i++) { Log.i("test","i="+i); SystemClock.sleep(1000); } //stopSelf();//當第一個線程執行完,就會停止服務 //所有的線程都執行完畢,才會停止服務 stopSelf(startId); } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富顺县| 余干县| 内黄县| 高邑县| 定陶县| 韶关市| 阿图什市| 丹寨县| 五峰| 沙坪坝区| 庆云县| 金溪县| 宜良县| 民丰县| 固安县| 安仁县| 九江县| 额敏县| 林西县| 留坝县| 太康县| 阿合奇县| 霍林郭勒市| 蒲江县| 东平县| 蓝田县| 循化| 新乐市| 内丘县| 简阳市| 津市市| 桂平市| 徐水县| 德化县| 上思县| 旅游| 盐城市| 郸城县| 洛川县| 柳江县| 天峻县|