国产探花免费观看_亚洲丰满少妇自慰呻吟_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); } }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开鲁县| 武汉市| 淳化县| 马山县| 金溪县| 仪征市| 二连浩特市| 五河县| 中超| 克什克腾旗| 临沂市| 罗田县| 花莲市| 陈巴尔虎旗| 延寿县| 文昌市| 施甸县| 安多县| 洞口县| 军事| 萨嘎县| 吉林市| 漠河县| 东辽县| 台东县| 鄂伦春自治旗| 盐边县| 长顺县| 牟定县| 从江县| 台安县| 鹤岗市| 舒城县| 永清县| 顺昌县| 乌苏市| 寻甸| 绥中县| 平乐县| 内丘县| 丹东市|