国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android service(服務(wù))中的綁定服務(wù)(binderService)詳解與使用

這篇具有很好參考價值的文章主要介紹了Android service(服務(wù))中的綁定服務(wù)(binderService)詳解與使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

前兩篇文章中介紹了普通的后臺服務(wù)及前臺服務(wù),這些服務(wù)有個共同的特點就是,啟動服務(wù)的組件和服務(wù)之間沒有任何關(guān)系。要想兩者之間發(fā)生點關(guān)系,那就需要將兩者之間綁定起來,這就用到了綁定服務(wù)。


何為綁定服務(wù)

綁定服務(wù)是提供客戶端 (例如 Android 活動))可以與之交互的客戶端-服務(wù)器接口的 Android 服務(wù)。綁定服務(wù)一般涉及客戶端與服務(wù)端,綁定服務(wù)是客戶端-服務(wù)端接口中的服務(wù)端。借助綁定服務(wù),組件(例如 Activity)可以綁定到服務(wù)、發(fā)送請求、接收響應(yīng),以及執(zhí)行進程間通信 (IPC)。綁定服務(wù)通常只在為其他應(yīng)用組件提供服務(wù)時處于活動狀態(tài),不會無限期在后臺運行。簡單來說就是為客戶端提供客戶端服務(wù)器接口以直接與服務(wù)交互的服務(wù)稱為-綁定服務(wù)。。

綁定服務(wù)是 Service 類的實現(xiàn),可讓其他應(yīng)用與其進行綁定和交互。如需為服務(wù)提供綁定,您必須實現(xiàn) onBind() 回調(diào)方法。此方法會返回一個 IBinder 對象,該對象定義的編程接口可供客戶端用來與服務(wù)進行交互。

綁定服務(wù)允許應(yīng)用組件通過調(diào)用 bindService() 與其綁定,從而創(chuàng)建長期連接。此服務(wù)通常不允許組件通過調(diào)用 startService() 來啟動它。

如需與 Activity 和其他應(yīng)用組件中的服務(wù)進行交互,或需要通過進程間通信 (IPC) 向其他應(yīng)用公開某些應(yīng)用功能,則應(yīng)創(chuàng)建綁定服務(wù)。

啟動服務(wù)與綁定服務(wù)

一個服務(wù)的類型一般是單一的,如啟動服務(wù)和綁定服務(wù),但也可以是多種狀態(tài)的,您可以創(chuàng)建同時具有已啟動和已綁定兩種狀態(tài)的服務(wù)。換言之,您可以通過調(diào)用 startService() 來啟動服務(wù),讓服務(wù)無限期運行,您也可以通過調(diào)用 bindService() 讓客戶端綁定到該服務(wù)。

如果您確實允許服務(wù)同時具有已啟動已綁定狀態(tài),那么服務(wù)啟動后,系統(tǒng)不會在所有客戶端均與服務(wù)取消綁定后銷毀服務(wù),而必須由您通過調(diào)用 stopSelf() 或 stopService() 顯式停止服務(wù)。即同時具備兩種狀態(tài)的情況下,解綁服務(wù)了,不能銷毀服務(wù)服務(wù)。

盡管您通常應(yīng)實現(xiàn) onBind()onStartCommand(),但有時也需要同時實現(xiàn)這兩種方法。例如,音樂播放器可能認為,讓其服務(wù)無限期運行并同時提供綁定很有用處。如此一來,Activity 便可啟動服務(wù)來播放音樂,并且即使用戶離開應(yīng)用,音樂播放也不會停止。然后,當(dāng)用戶返回應(yīng)用時,Activity 便能綁定到服務(wù),重新獲得播放控制權(quán)。

綁定服務(wù)的特點

客戶端通過調(diào)用 bindService() 綁定到服務(wù)。調(diào)用時,它必須提供 ServiceConnection 的實現(xiàn),后者會監(jiān)控與服務(wù)的連接。bindService() 的返回值指示所請求的服務(wù)是否存在,以及是否允許客戶端訪問該服務(wù)。Android 系統(tǒng)創(chuàng)建客戶端與服務(wù)之間的連接時,會對 ServiceConnection 調(diào)用 onServiceConnected()。onServiceConnected() 方法包含一個 IBinder 參數(shù),客戶端隨后會使用該參數(shù)與綁定服務(wù)通信。

您可以將多個客戶端同時連接到某項服務(wù)。但是,系統(tǒng)會緩存 IBinder 服務(wù)通信通道。換言之,只有在第一個客戶端綁定服務(wù)時,系統(tǒng)才會調(diào)用服務(wù)的 onBind() 方法來生成 IBinder。然后,系統(tǒng)會將該 IBinder 傳遞至綁定到同一服務(wù)的所有其他客戶端,無需再次調(diào)用 onBind()。

當(dāng)最后一個客戶端取消與服務(wù)的綁定時,系統(tǒng)會銷毀該服務(wù)(除非還通過 startService() 啟動了該服務(wù))。

在實現(xiàn)綁定服務(wù)的過程中,最重要的環(huán)節(jié)是定義 onBind() 回調(diào)方法所返回的接口。下一部分將為您介紹幾種不同方式,以便您定義服務(wù)的 IBinder 接口。

如要創(chuàng)建綁定服務(wù):

  • 您需通過實現(xiàn) onBind() 回調(diào)方法返回 IBinder,從而定義與服務(wù)進行通信的接口。然后,其他應(yīng)用組件可通過調(diào)用 bindService() 來檢索該接口,并開始調(diào)用與服務(wù)相關(guān)的方法。服務(wù)只用于與其綁定的應(yīng)用組件,因此若沒有組件與該服務(wù)綁定,則系統(tǒng)會銷毀該服務(wù)。您不必像通過 onStartCommand() 啟動的服務(wù)那樣,以相同方式停止綁定服務(wù)。

  • 您必須定義指定客戶端如何與服務(wù)進行通信的接口。服務(wù)與客戶端之間的這個接口必須是 IBinder 的實現(xiàn),并且服務(wù)必須從 onBind() 回調(diào)方法返回該接口。收到 IBinder 后,客戶端便可開始通過該接口與服務(wù)進行交互。

多個客戶端可以同時綁定到服務(wù)。完成與服務(wù)的交互后,客戶端會通過調(diào)用 unbindService() 來取消綁定。如果沒有綁定到服務(wù)的客戶端,則系統(tǒng)會銷毀該服務(wù)。

實現(xiàn)綁定服務(wù)有多種方法,并且此實現(xiàn)比啟動服務(wù)更為復(fù)雜。


綁定服務(wù)使用

創(chuàng)建綁定服務(wù)

創(chuàng)建提供綁定的服務(wù)時,您必須提供 IBinder,用以提供編程接口,供客戶端與服務(wù)進行交互之用。您可以通過三種方式定義接口:

1、 擴展binder類

通過繼承Binder類的形式來進行服務(wù)綁定,此中情況最為常用,它適用于在應(yīng)用內(nèi)部服務(wù)與客戶端的通信,并且服務(wù)與客戶端在相同的進程中運行(常見情況),您應(yīng)當(dāng)通過擴展 Binder 類并從 onBind() 返回該類的實例來創(chuàng)建接口??蛻舳耸盏?Binder 后,可利用它直接訪問 Binder 實現(xiàn)或 Service 中提供的公共方法。

應(yīng)用場景

如果您的服務(wù)僅供本地應(yīng)用使用,且無需跨進程工作,您可以實現(xiàn)自有 Binder 類,讓客戶端通過該類直接訪問服務(wù)中的公共方法。

如果服務(wù)只是您自有應(yīng)用的后臺工作器,應(yīng)優(yōu)先采用這種方式。您不使用這種方式創(chuàng)建接口的唯一一種情況是:其他應(yīng)用或不同進程占用了您的服務(wù)。

需要注意的是:

  • 只有當(dāng)客戶端和服務(wù)處于同一應(yīng)用和進程內(nèi)(最常見的情況)時,此方式才有效。例如,對于需要將 Activity 綁定到在后臺播放音樂的自有服務(wù)的音樂應(yīng)用,此方式非常有效。
  • 服務(wù)和客戶端必須在同一應(yīng)用內(nèi),這樣客戶端才能轉(zhuǎn)換返回的對象并正確調(diào)用其 API。服務(wù)和客戶端還必須在同一進程內(nèi),因為此方式不執(zhí)行任何跨進程編組。
使用案例

實現(xiàn)一個綁定服務(wù)需要做如下開發(fā)步驟:

  1. 創(chuàng)建一個服務(wù)類繼承自Service,并實現(xiàn)Service類的生命周期函數(shù)。
  2. 在您的服務(wù)中,創(chuàng)建可執(zhí)行以下某種操作的 Binder 實例:
  • 包含客戶端可調(diào)用的公共方法。
    
  • 返回當(dāng)前的 Service 實例,該實例中包含客戶端可調(diào)用的公共方法。這里不絕對,也可以直接定義方法,不做返回,直接在onBind() 中返回Binder實例也可。
    
  • 返回由服務(wù)承載的其他類的實例,其中包含客戶端可調(diào)用的公共方法。
    
  1. onBind() 回調(diào)方法返回此 Binder 實例。
  2. 在客戶端中,從 onServiceConnected() 回調(diào)方法接收 Binder,并使用提供的方法調(diào)用綁定服務(wù)。

按照上述描述的步驟,首先創(chuàng)建一個服務(wù)類

package com.cop.ronghw.study_android_exact;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

/**
 * 創(chuàng)建一個綁定服務(wù)
 */
public class MyBinderService extends Service {
    public MyBinderService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }
}

其次創(chuàng)建Binder實例,做為綁定器供客戶端使用,并提供客戶端調(diào)用的公共方法:

/**
 * 創(chuàng)建一個綁定服務(wù)
 */
public class MyBinderService extends Service {
    public MyBinderService() {
    }

    //給客戶端使用的binder
    private final IBinder iBinder =  new MyServiceBinder();
    /**
     * 用于客戶端綁定器的類。因為我們知道這個服務(wù)總是運行在與其客戶機相同的進程中,
     * 所以我們不需要處理IPC。
     */
    public class MyServiceBinder extends Binder{
          MyBinderService getService(){
              //返回MyBinderService實例,以便客戶端可以調(diào)用公共方法
             return MyBinderService.this;
          }
        }

    @Override
    public IBinder onBind(Intent intent) {
        Log.i("MyBinderService","執(zhí)行onBind方法");
        return iBinder;
    }

    //服務(wù)提供的公共方法,供客戶端調(diào)用
    public String getFileString(){
       return "file獲取成功";
    }
    // 文件上傳
    public void uplodFile(){
        Log.i("MyBinderService","uplodFile-文件上傳");
    }

    @Override
    public void onCreate() {
        Log.i("MyBinderService","執(zhí)行onCreate方法");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("MyBinderService","執(zhí)行onStartCommand方法");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.i("MyBinderService","執(zhí)行onDestroy方法");
        super.onDestroy();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.i("MyBinderService","執(zhí)行onUnbind方法");
        return super.onUnbind(intent);
    }

}

MyServiceBinder 為客戶端提供 getService() 方法,用于檢索 MyBinderService 的當(dāng)前實例。這樣,客戶端便可調(diào)用服務(wù)中的公共方法。例如,客戶端可調(diào)用服務(wù)中的 getFileString()方法和uplodFile() 兩個公共的方法。

接著在客戶端添加測試按鈕,并綁定服務(wù):

public class MyBinderActivity extends AppCompatActivity{

    MyBinderService myBinderService;

   //定義服務(wù)綁定的回調(diào),傳遞給bindService()
    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName className,IBinder service) {
            //我們已經(jīng)綁定到MyBinderService,向下轉(zhuǎn)型轉(zhuǎn)換IBinder為MyBinderService.MyServiceBinder并獲得MyBinderService實例
           MyBinderService.MyServiceBinder binder = (MyBinderService.MyServiceBinder) service;
           myBinderService = binder.getService();

        }
        @Override
        public void onServiceDisconnected(ComponentName arg0) {

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mybinder);
    }

    // 活動隱藏掛起后解綁服務(wù)
    @Override
    protected void onStop() {
        super.onStop();
        //解綁服務(wù)
        unbindService(connection);
    }

    // 在這里我們分別在活動OnStart這里及界面剛剛加載時就給此活動綁定好服務(wù)
    @Override
    protected void onStart() {
        super.onStart();
        // activity加載后就進行服務(wù)綁定
        Intent intent = new Intent(this, MyBinderService.class);
        bindService(intent, connection, Context.BIND_AUTO_CREATE);
    }

    //測試點擊事件
    public void onButtonclick(View v){
        String fileString  = myBinderService.getFileString();
        Log.i("MyBinderActivity","文件內(nèi)容為=="+fileString);
        myBinderService.uplodFile();
    }
}

上述代碼中:MyBinderActivity 啟動后并是可見狀態(tài)下會自動調(diào)用bindService綁定服務(wù),通過此方法連接到應(yīng)用程序服務(wù),并在需要時創(chuàng)建它。這定義了應(yīng)用程序和服務(wù)之間的依賴關(guān)系。bindService方法提供了三個參數(shù):

  • service intent :標識要連接的服務(wù)。Intent必須指定顯式的組件名稱。
  • serviceConnection :在服務(wù)啟動和停止時接收信息。這必須是一個有效的ServiceConnection對象,它不能為空。它類似一個通信管道,通過ServiceConnection實例對象建立起了客戶端與服務(wù)器的連接。
  • flags:這里提供了多種標志,本示例中使用BIND_AUTO_CREATE,代表只要綁定存在,就自動創(chuàng)建服務(wù)。第三個參數(shù)是指示綁定選項的標記。如要創(chuàng)建尚未處于活動狀態(tài)的服務(wù),此參數(shù)通常應(yīng)為 BIND_AUTO_CREATE。其他可能的值為 BIND_DEBUG_UNBIND 和 BIND_NOT_FOREGROUND,或者 0(表示無此參數(shù))。

其中參數(shù)serviceConnection實例對象,是在MyBinderActivity中創(chuàng)建的,此內(nèi)部類中重寫了兩個方法:onServiceDisconnected()onServiceConnected (ComponentName name, IBinder service) 這兩個方法分別是在客戶端與服務(wù)器端建立連接失敗和建立連接成功后調(diào)用。其中onServiceDisconnected()方法是在當(dāng)與服務(wù)的連接丟失時調(diào)用。這通常發(fā)生在托管服務(wù)的進程崩潰或被殺死時。這并不會移除ServiceConnection本身——這個與服務(wù)的綁定將保持活動狀態(tài),當(dāng)服務(wù)下次運行時,您將收到對onserviceconnconnected (ComponentName, IBinder)的調(diào)用。而在onServiceConnected方法中,通過向下轉(zhuǎn)型,獲取到了service實例,后續(xù)的方法中會使用service實例來使用service中定義的公共方法。
需要注意的是,onServiceDisconnected()onServiceConnected (ComponentName name, IBinder service) 這兩個方法均是在bindservice() 方法調(diào)用之后觸發(fā)。

下面來看一下執(zhí)行日志:當(dāng)進入到MyBinderActivity時會執(zhí)行活動的onStart方法,在onStart方法中調(diào)用了 bindService(intent, connection, Context.BIND_AUTO_CREATE) 進行服務(wù)的綁定,此時會調(diào)用到服務(wù)的oncreat方法和onbind方法如下:
Android service(服務(wù))中的綁定服務(wù)(binderService)詳解與使用
此時如果綁定成功就會在MyBinderActivity返回了MyBinderService實例。此時就可以在活動中調(diào)用MyBinderService中的方法了。這樣就使得客戶端與服務(wù)端建立起了聯(lián)系。

bindService方法的返回值是一個布爾類型的值, 如果系統(tǒng)正在啟動客戶端有權(quán)限綁定的服務(wù),則為True;如果系統(tǒng)無法找到該服務(wù),或者如果您的客戶端沒有綁定該服務(wù)的權(quán)限,則為False。不管返回值是多少,您都應(yīng)該稍后調(diào)用unbindService(ServiceConnection)來釋放連接。

總結(jié)

我們再把上述步驟總結(jié)一下:

應(yīng)用組件(客戶端)可通過調(diào)用 bindService() 綁定到服務(wù)。然后,Android 系統(tǒng)會調(diào)用服務(wù)的 onBind() 方法,該方法會返回用于與服務(wù)交互的 IBinder

綁定是異步操作,并且 bindService() 可立即返回,無需將 IBinder 返回給客戶端。如要接收 IBinder,客戶端必須創(chuàng)建一個 ServiceConnection 實例,并將其傳遞給 bindService()。ServiceConnection 包含一個回調(diào)方法,系統(tǒng)通過調(diào)用該回調(diào)方法來傳遞 IBinder。

注意:只有 Activity、服務(wù)和內(nèi)容提供程序可以綁定到服務(wù),您無法從廣播接收器綁定到服務(wù)。

如要從您的客戶端綁定到服務(wù),請按以下步驟操作:

  1. 實現(xiàn) ServiceConnection。
    您的實現(xiàn)必須替換兩個回調(diào)方法:
  • onServiceConnected()
    系統(tǒng)會調(diào)用該方法以傳遞服務(wù)的 onBind() 方法所返回的 IBinder。
  • onServiceDisconnected()
    當(dāng)與服務(wù)的連接意外中斷時,例如服務(wù)崩潰或被終止時,Android 系統(tǒng)會調(diào)用該方法。當(dāng)客戶端取消綁定時,系統(tǒng)不會調(diào)用該方法。
  1. 調(diào)用 bindService(),從而傳遞 ServiceConnection 實現(xiàn)。

注意:如果該方法返回 false,說明您的客戶端與服務(wù)之間并無有效連接。不過,您的客戶端仍應(yīng)調(diào)用 unbindService();否則,您的客戶端會使服務(wù)無法在空閑時關(guān)閉。

  1. 當(dāng)系統(tǒng)調(diào)用 onServiceConnected() 回調(diào)方法時,您可以使用接口定義的方法開始調(diào)用服務(wù)。
  2. 如要斷開與服務(wù)的連接,請調(diào)用 unbindService()。
    當(dāng)應(yīng)用銷毀客戶端時,如果客戶端仍與服務(wù)保持綁定狀態(tài),銷毀會導(dǎo)致客戶端取消綁定。更好的做法是在客戶端與服務(wù)交互完成后,就立即取消客戶端的綁定。這樣做可以關(guān)閉空閑的服務(wù)。

以下是一些有關(guān)綁定到服務(wù)的重要說明

  • 您應(yīng)該始終捕獲 DeadObjectException 異常,系統(tǒng)會在連接中斷時拋出此異常。這是遠程方法拋出的唯一異常。
  • 對象是跨進程計數(shù)的引用。
  • 如以下示例所述,在匹配客戶端生命周期的引入 (bring-up) 和退出 (tear-down) 時刻期間,您通常需配對綁定和取消綁定:
    • 如果您只需在 Activity 可見時與服務(wù)交互,應(yīng)在 onStart() 期間進行綁定,在 onStop() 期間取消綁定。
    • 如果您希望 Activity 即使在后臺停止運行狀態(tài)下仍可接收響應(yīng),那么您可以在 onCreate() 期間綁定,在 onDestroy() 期間取消綁定。請注意,這意味著您的 Activity 在其整個運行過程中(甚至包括后臺運行期間)都需要使用服務(wù),因此如果服務(wù)位于其他進程內(nèi),那么當(dāng)您提高該進程的權(quán)重時,系統(tǒng)終止該進程的可能性會增加。

注意:通常情況下,不應(yīng)在 Activity 的 onResume() 和 onPause() 期間綁定和取消綁定,因為每次切換生命周期狀態(tài)時都會發(fā)生這些回調(diào),您應(yīng)將這些轉(zhuǎn)換期間的處理工作保持在最低水平。此外,如果您的應(yīng)用內(nèi)的多個 Activity 綁定到同一服務(wù),并且其中兩個 Activity 之間發(fā)生了轉(zhuǎn)換,那么如果當(dāng)前 Activity 先取消綁定(暫停期間),然后下一個 Activity 再進行綁定(恢復(fù)期間),系統(tǒng)可能就會銷毀后再重新創(chuàng)建該服務(wù)。

綁定服務(wù)的生命周期

當(dāng)服務(wù)與所有客戶端之間的綁定全部取消時,Android 系統(tǒng)會銷毀該服務(wù)(除非還使用 startService() 調(diào)用啟動了該服務(wù))。因此,如果您的服務(wù)是純粹的綁定服務(wù),則無需對其生命周期進行管理,Android 系統(tǒng)會根據(jù)它是否綁定到任何客戶端代您管理。

不過,如果您選擇實現(xiàn) onStartCommand() 回調(diào)方法,就必須顯式停止服務(wù),因為系統(tǒng)現(xiàn)在將服務(wù)視為已啟動狀態(tài)。在此情況下,服務(wù)將一直運行,直到其通過 stopSelf() 自行停止,或其他組件調(diào)用 stopService()(與該服務(wù)是否綁定到任何客戶端無關(guān))。

此外,如果您的服務(wù)已啟動并接受綁定,那么當(dāng)系統(tǒng)調(diào)用您的 onUnbind() 方法時,如果您想在客戶端下一次綁定到服務(wù)時接收 onRebind() 調(diào)用,可以選擇返回 true。onRebind() 返回空值,但客戶端仍會在其 onServiceConnected() 回調(diào)中接收 IBinder。下圖說明了這種生命周期的邏輯。
Android service(服務(wù))中的綁定服務(wù)(binderService)詳解與使用文章來源地址http://www.zghlxwxcb.cn/news/detail-446642.html

到了這里,關(guān)于Android service(服務(wù))中的綁定服務(wù)(binderService)詳解與使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Android入門教程 | 四大組件之Service(前臺服務(wù),后臺服務(wù))

    Android入門教程 | 四大組件之Service(前臺服務(wù),后臺服務(wù))

    Service是一種可在后臺執(zhí)行長時間運行操作而不提供界面的應(yīng)用組件。服務(wù)可由其他應(yīng)用組件啟動,而且即使用戶切換到其他應(yīng)用,服務(wù)仍將在后臺繼續(xù)運行。 此外,組件可通過綁定到服務(wù)與之進行交互,甚至是執(zhí)行進程間通信 (IPC)。 例如,服務(wù)可在后臺處理網(wǎng)絡(luò)事務(wù)、播放

    2024年02月05日
    瀏覽(35)
  • WPF中的綁定知識詳解(含案例源碼分享)

    WPF中的綁定知識詳解(含案例源碼分享)

    ?作者簡介:2022年 博客新星 第八 。熱愛國學(xué)的Java后端開發(fā)者,修心和技術(shù)同步精進。 ??個人主頁:Java Fans的博客 ??個人信條:不遷怒,不貳過。小知識,大智慧。 ??當(dāng)前專欄:WPF 案例及知識分享專欄 ?特色專欄:樂趣國學(xué)-心性養(yǎng)成之路 ??本文內(nèi)容:WPF中的綁定知識

    2024年02月08日
    瀏覽(17)
  • Android Usb(OTG)串口通信,Service 后臺服務(wù)實現(xiàn)方式

    Android Usb(OTG)串口通信,Service 后臺服務(wù)實現(xiàn)方式

    以下是幾個開源的 Android 串口通信庫: 1. SerialPort:https://github.com/felHR85/SerialPort 這是一個非常流行的 Android 串口通信庫,支持多種設(shè)備和多種波特率,并且提供了非常詳細的文檔和示例代碼。 2. android-serialport-api:https://github.com/cepr/android-serialport-api 這是一個簡單易用的 And

    2024年02月11日
    瀏覽(21)
  • k8s Service服務(wù)詳解

    k8s Service服務(wù)詳解

    k8s中Service定義了這樣一種抽象:一個pod的邏輯分組,一種可以訪問他們的策略—通常稱為微服務(wù)。這一組pod能夠被Service訪問到,通常是通過Label Selector Service能夠提供負載均衡的能力,但是在使用上有以下限制: 只提供4層負載均衡能力,而沒有7層功能,但有時我們可能需要

    2024年02月13日
    瀏覽(25)
  • k8s 中的無頭服務(wù) (Headless Services)

    ????????有時候我們不需要負載均衡,以及單獨的 Service IP。 遇到這種情況,可以通過指定 Cluster IP(spec.clusterIP)的值為 \\\"None\\\" 來創(chuàng)建無頭服務(wù)。通過無頭服務(wù)的標簽選擇器(Label Selector)可以將后端的 Pod 列表返回給調(diào)用的客戶端。 ????????對于無頭服務(wù),不會為其分

    2024年02月15日
    瀏覽(20)
  • 詳解微信小程序開發(fā)中的“數(shù)據(jù)綁定”和代碼樣例

    詳解微信小程序開發(fā)中的“數(shù)據(jù)綁定”和代碼樣例

    首先需要區(qū)分微信小程序的運行環(huán)境和框架系統(tǒng)。運行環(huán)境為小程序在手機當(dāng)中運行的時候,微信客戶端所能提供的環(huán)境支持,也就是在這種環(huán)境下如何進行數(shù)據(jù)渲染工作;框架系統(tǒng)則是微信小程序在進行開發(fā)的過程中,如何通過代碼實現(xiàn)數(shù)據(jù)綁定,以及在這種框架下,是如

    2024年02月11日
    瀏覽(16)
  • Android使用Glide類加載服務(wù)器中的圖片

    Glide類用于從服務(wù)器中獲取圖片并加載進ImageView。 一、添加依賴 Glide為 第三方框架 ,使用時需添加依賴: 在 Gradle Scripts / build.gradle(Module:app) / dependencies方法 中添加 添加后會下載。 二、獲取權(quán)限 獲取服務(wù)器中的圖片需要 申請(靜態(tài)聲明)網(wǎng)絡(luò)權(quán)限 ,在清單文件中添加 三、

    2024年02月06日
    瀏覽(26)
  • k8s服務(wù)發(fā)現(xiàn)之第二彈Service詳解

    k8s服務(wù)發(fā)現(xiàn)之第二彈Service詳解

    Kubernetes Servies 是一個 RESTFul 接口對象,可通過 yaml 文件創(chuàng)建。 例如,假設(shè)您有一組 Pod: 每個 Pod 都監(jiān)聽 9376 TCP 端口 每個 Pod 都有標簽 app=MyApp 上述 YAML 文件可用來創(chuàng)建一個 Service: 名字為 my-service 目標端口為 TCP 9376 選取所有包含標簽 app=MyApp 的 Pod 關(guān)于 Service,您還需要了解

    2024年02月16日
    瀏覽(19)
  • android服務(wù)啟動失敗Unable to start service Intent U=0: not found

    android啟動服務(wù)失敗,提示:Unable to start service Intent { cmp=xxx/.xxx} U=0: not found。檢查清單文件服務(wù)配置沒有錯,啟動服務(wù)的方法也沒錯。 場景:我的程序是系統(tǒng)應(yīng)用,運行于9.0,作為launcher使用,在application onCreate中啟動服務(wù)。試過延遲啟動服務(wù)和配置action和Package的方式啟動服

    2024年02月11日
    瀏覽(17)
  • Android service介紹——startService和bindService基本使用(1)

    Android service介紹——startService和bindService基本使用(1)

    在安卓日常開發(fā)和學(xué)習(xí)中,經(jīng)常會使用到Service,它是Android四大組件之一。使用Service可以在后臺執(zhí)行長時間的操作( perform long-running operations in the background ),Service并不與用戶產(chǎn)生UI交互。其他的應(yīng)用組件可以啟動Service,即便用戶切換了其他應(yīng)用,啟動的Service仍可在后臺運行。

    2024年02月05日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包