91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-14 19:17:03 來源:腳本之家 閱讀:139 作者:彭艷 欄目:移動開發

服務是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的子類。它使用工作線程逐一處理所有啟動請求。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙南县| 麻阳| 同德县| 陆川县| 河源市| 宁陵县| 晋城| 吉木萨尔县| 乌拉特中旗| 宁蒗| 光泽县| 阳高县| 阳新县| 吉木萨尔县| 洞口县| 哈密市| 阿拉善左旗| 正安县| 朝阳区| 扶余县| 尉犁县| 通道| 城步| 五家渠市| 酒泉市| 呼图壁县| 日土县| 天津市| 宁河县| 岗巴县| 海原县| 保康县| 卓资县| 淳化县| 沙坪坝区| 武冈市| 通州市| 永靖县| 广丰县| 交城县| 白玉县|