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

首頁 > 系統 > Android > 正文

Anroid四大組件service之本地服務的示例代碼

2019-12-12 01:50:48
字體:
來源:轉載
供稿:網友

服務是Android四大組件之一,與Activity一樣,代表可執行程序。但Service不像Activity有可操作的用戶界面,它是一直在后臺運行。用通俗易懂點的話來說:

如果某個應用要在運行時向用戶呈現可操作的信息就應該選擇Activity,如果不是就選擇Service。

Service的生命周期如下:

Service只會被創建一次,也只會被銷毀一次。那么,如何創建本地服務呢?

實現代碼如下:

package temp.com.androidserivce;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.SystemClock;import android.support.annotation.Nullable;import android.util.Log;/** * Created by Administrator on 2017/8/18. */public class Myservice extends Service {  @Override  public void onCreate() {    Log.i("test", "服務被創建");    super.onCreate();  }  @Override  public int onStartCommand(Intent intent, int flags, int startId) {    Log.i("test", "服務被啟動");    new Thread(new myRunnable(startId)).start();    return super.onStartCommand(intent, flags, startId);  }  @Override  public void onDestroy() {    Log.i("test", "服務被銷毀");    super.onDestroy();  }  @Nullable  @Override  public IBinder onBind(Intent intent) {    return null;  }  class myRunnable implements Runnable {    int startId;    public myRunnable(int startId) {      this.startId = startId;    }    @Override    public void run() {      for (int i = 0; i < 10; i++) {        SystemClock.sleep(1000);        Log.i("test", i + "");       }      //停止服務      //stopSelf();      stopSelf(startId);      //當用無參數的停止服務時,將會銷毀第一次所啟動的服務;      //當用帶參數的停止服務時,將會銷毀最末次所啟動的服務;    }  }}

要聲明服務,就必須在manifests中進行配置

<manifest ... > ... <application ... >   <service android:name=".Myservice" android:exported="true"/> ... </application> </manifest>

android:exported="true" 設置了這個屬性就表示別人也可以使用你的服務。

還有一個需要注意的小點,在Myservice中可以看見我啟動時用了一個子線程去幫我實現工作,那么我為什么沒有直接把for循環的那段代碼寫在onStartCommand方法中呢,是因為寫在onStartCommand中將會報ANR程序無響應的錯誤。就是當你所有的事情都去交給主線程做時,就會造成主線程內存溢出,它就會炸了。這個時候也可以用IntentService來取代Service。

package temp.com.androidserivce;import android.app.IntentService;import android.content.Intent;import android.os.SystemClock;import android.util.Log;/** * Created by Administrator on 2017/8/18. */public class MyService2 extends IntentService {  public MyService2() {    super("");  }  public MyService2(String name) {    super(name);  }  @Override  protected void onHandleIntent(Intent intent) {    for (int i = 0; i <10 ; i++) {      SystemClock.sleep(1000);      Log.i("test",i+"");    }  }}

使用這個相對而言會比較簡單。IntentService是Service的子類。它使用工作線程逐一處理所有啟動請求。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泸溪县| 兰西县| 南华县| 梁平县| 安西县| 女性| 重庆市| 望城县| 安徽省| 周口市| 古丈县| 张北县| 会理县| 东海县| 会泽县| 彩票| 图们市| 东兴市| 克拉玛依市| 大厂| 靖远县| 叶城县| 克拉玛依市| 九寨沟县| 邹平县| 抚远县| 荃湾区| 惠水县| 罗定市| 安庆市| 星子县| 鄂托克前旗| 大兴区| 驻马店市| 北安市| 神池县| 北宁市| 肥西县| 财经| 上思县| 巴彦淖尔市|