日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java+整合handwrite_Java

發布時間:2023/12/9 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java+整合handwrite_Java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、先簡單首先回顧一下Service的一些問題

1、為什么使用Service?

答:對于一些需要長時間才可執行完畢的操作放在Activity里不太合適,因為Activity關閉后導致操作不能再繼續,但后臺服務可以持續運行。

2、bindService和startService的區別?

答:1)兩者創建的service的生命周期不同

2)startService啟動的服務不能返回service的實例,bindService的可以

3、為什么不直接使用new XxxxService來創建服務?

答:在執行startService或者bindService時,android會把會啟動的服務進行記錄(未做深入研究),以確保擁有后臺服務的進程具有較高的優先級,所以要使用startService或者bindService來創建服務。new XxxxService只是創建了一個服務類的實例,而不是一個服務。

4、為什么onServiceDisconnected一直未被調用到?

答:unbindService并不會導致onServieDisconnected被調用,只有在服務被系統銷毀的時候才會被調用。

5、可以在一個應用中使用startService跨進程啟動另外一個進程的服務嗎?

答:可以,需要設置目標進程的包名,可以使用如下代碼或者setPackage(未測試)

Java

Intent intent = new Intent();

intent.setClassName("com.zht.car.testservice", "com.zht.car.testservice.MyTestService");

startService(intent);

1

2

3

Intentintent=newIntent();

intent.setClassName("com.zht.car.testservice","com.zht.car.testservice.MyTestService");

startService(intent);

6、既然可以跨進程調用startService那為什么還要使用aidl?

答:startService只能啟動另外進程的服務,最多還可以通過intent傳入一些參數,但是不能從對方進程返回數據,所以如果跨進程通訊aidl還是很有必要的。

二、bindService的開發步驟簡述

1、創建一個Service,比如本例中為MyTestService

2、在Service中定義一個Binder的子類MyServiceBinder,后面用來返回MyTestService的實例(見一、3為什么不能直接new MyTestService() )

3、定義并實例化一個MyServiceBinder對象,用來在Service的onBind函數中返回給調用者

4、在Service的onBind函數中返回MyServiceBinder實例對象,android sdk會通過各種調用將這個對象傳到ServiceConnection的onServiceConnected

5、在Activity中定義一個MyTestService對象

6、在Activity中執行bindService

7、在Activity中實例化一個ServiceConnection對象

8、在ServiceConnection對象的onServiceConnected回調函數中,將參數中的IBinder對象強制轉換為Service中定義的Binder子類(MyServiceBinder)對象

9、通過強制Binder子類對象的方法獲取MyTestService實例,至此就得到這個Service的實例了

10、綁定狀態的控制,通過一個boolean類型的變量來控制,以及其他的回調函數的設置

三、時序圖

四、代碼

1、Service的代碼

package com.zht.car.testservice;

import android.app.Service;

import android.content.Intent;

import android.os.Binder;

import android.os.Handler;

import android.os.IBinder;

public class MyTestService extends Service {

private MyServiceBinder mMyServiceBinder = new MyServiceBinder();

private OnWeightChangeListener mOnWeightChangeListener;

private int mWeight = 20;

public MyTestService() {

}

@Override

public IBinder onBind(Intent intent) {

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

mWeight = mWeight * 2;

if(mOnWeightChangeListener != null){

mOnWeightChangeListener.onWeightChange(mWeight);

}

}

}, 1000);

return mMyServiceBinder;

}

class MyServiceBinder extends Binder {

MyTestService getService(){

return MyTestService.this;

}

}

public int getWeight() {

return mWeight;

}

public void setOnWeightChangeListener(OnWeightChangeListener onWeightChangeListener) {

mOnWeightChangeListener = onWeightChangeListener;

}

public interface OnWeightChangeListener {

public void onWeightChange(int weight);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

packagecom.zht.car.testservice;

importandroid.app.Service;

importandroid.content.Intent;

importandroid.os.Binder;

importandroid.os.Handler;

importandroid.os.IBinder;

publicclassMyTestServiceextendsService{

privateMyServiceBindermMyServiceBinder=newMyServiceBinder();

privateOnWeightChangeListenermOnWeightChangeListener;

privateintmWeight=20;

publicMyTestService(){

}

@Override

publicIBinderonBind(Intentintent){

newHandler().postDelayed(newRunnable(){

@Override

publicvoidrun(){

mWeight=mWeight *2;

if(mOnWeightChangeListener!=null){

mOnWeightChangeListener.onWeightChange(mWeight);

}

}

},1000);

returnmMyServiceBinder;

}

classMyServiceBinderextendsBinder{

MyTestServicegetService(){

returnMyTestService.this;

}

}

publicintgetWeight(){

returnmWeight;

}

publicvoidsetOnWeightChangeListener(OnWeightChangeListeneronWeightChangeListener){

mOnWeightChangeListener=onWeightChangeListener;

}

publicinterfaceOnWeightChangeListener{

publicvoidonWeightChange(intweight);

}

}

2、Activity代碼

package com.zht.car.testservice;

import android.app.Service;

import android.content.ComponentName;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.IBinder;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

public class MainActivity extends AppCompatActivity {

private MyTestService mMyTestService;

private String LOG_TAG = "MainActivity";

private boolean mServiceBinded = false;

private ServiceConnection mServiceConnection = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

MyTestService.MyServiceBinder binder = (MyTestService.MyServiceBinder) service;

mMyTestService = binder.getService();

mMyTestService.setOnWeightChangeListener(new MyTestService.OnWeightChangeListener() {

@Override

public void onWeightChange(int weight) {

Log.d(LOG_TAG, "Weight changed: " + mMyTestService.getWeight());

}

});

mServiceBinded = true;

Log.d(LOG_TAG, "Service connected.");

Log.d(LOG_TAG, "weight: " + mMyTestService.getWeight());

}

@Override

public void onServiceDisconnected(ComponentName name) {

Log.d(LOG_TAG, "Service disconnected.");

mServiceBinded = false;

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

@Override

protected void onDestroy() {

if(mServiceBinded) {

unbindService(mServiceConnection);

}

super.onDestroy();

}

public void onBindServiceClick(View view) {

if(mServiceBinded){

return;

}

Intent intent = new Intent(this, MyTestService.class);

bindService(intent, mServiceConnection, Service.BIND_AUTO_CREATE);

}

public void onUnbindServiceClick(View view) {

if(!mServiceBinded) {

return;

}

unbindService(mServiceConnection);

mServiceBinded = false;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

packagecom.zht.car.testservice;

importandroid.app.Service;

importandroid.content.ComponentName;

importandroid.content.Intent;

importandroid.content.ServiceConnection;

importandroid.os.IBinder;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.View;

publicclassMainActivityextendsAppCompatActivity{

privateMyTestServicemMyTestService;

privateStringLOG_TAG="MainActivity";

privatebooleanmServiceBinded=false;

privateServiceConnectionmServiceConnection=newServiceConnection(){

@Override

publicvoidonServiceConnected(ComponentNamename,IBinderservice){

MyTestService.MyServiceBinderbinder=(MyTestService.MyServiceBinder)service;

mMyTestService=binder.getService();

mMyTestService.setOnWeightChangeListener(newMyTestService.OnWeightChangeListener(){

@Override

publicvoidonWeightChange(intweight){

Log.d(LOG_TAG,"Weight changed: "+mMyTestService.getWeight());

}

});

mServiceBinded=true;

Log.d(LOG_TAG,"Service connected.");

Log.d(LOG_TAG,"weight: "+mMyTestService.getWeight());

}

@Override

publicvoidonServiceDisconnected(ComponentNamename){

Log.d(LOG_TAG,"Service disconnected.");

mServiceBinded=false;

}

};

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

@Override

protectedvoidonDestroy(){

if(mServiceBinded){

unbindService(mServiceConnection);

}

super.onDestroy();

}

publicvoidonBindServiceClick(Viewview){

if(mServiceBinded){

return;

}

Intentintent=newIntent(this,MyTestService.class);

bindService(intent,mServiceConnection,Service.BIND_AUTO_CREATE);

}

publicvoidonUnbindServiceClick(Viewview){

if(!mServiceBinded){

return;

}

unbindService(mServiceConnection);

mServiceBinded=false;

}

}

總結

以上是生活随笔為你收集整理的java+整合handwrite_Java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩免费网址 | 天堂在线 | a天堂资源 | 五月婷婷中文 | 毛片基地在线播放 | 国产精品综合一区二区 | 丝袜 中出 制服 人妻 美腿 | 成人做受黄大片 | 一级不卡毛片 | 婷婷色吧| 欧美大屁股熟妇bbbbbb | 国产网站免费看 | av片一区二区三区 | 久久中文字幕人妻熟av女蜜柚m | 国产伦精品一区二区三区在线 | 美女在线观看视频 | 黄色一级淫片 | 亚洲国产网 | 亚洲国产一区二区三区在线观看 | 午夜精品一区二区在线观看 | 日本激情网 | 亚洲av色一区二区三区精品 | 久久靖品| 韩国三级中文字幕hd浴缸戏 | 老妇裸体性激交老太视频 | 美女视频黄色免费 | 人与嘼交av免费 | 欧美天天爽 | 欧美精品久久久久久久久老牛影院 | 久久福利影院 | 公侵犯一区二区三区 | 亚洲视频在线观看免费 | 日本十八禁视频无遮挡 | 激情aaa | 亚洲视频123 | 懂色av,蜜臀av粉嫩av | 国产吞精囗交免费视频网站 | 色视频导航 | 国产精品久久在线观看 | 日本女教师电影 | 蜜臀av一区二区 | 欧美在线视频网站 | 国产精品免费电影 | 日韩免费福利 | 黄色网址你懂的 | 麻豆福利影院 | 中国特级黄色大片 | 成年人免费观看视频网站 | 国产chinese中国hdxxxx | 成年人高清视频 | 午夜视频网站 | 国语对白清晰刺激对白 | 国产av国片偷人妻麻豆 | 成人av综合网 | 日韩成人在线视频 | 成人自拍偷拍 | 实拍女处破www免费看 | 国产精品中文无码 | 日本阿v视频在线观看 | 亚洲国产成人精品久久久 | 欧美在线播放一区 | 找个毛片看看 | 久草视频精品 | 国产天天综合 | 波多野结衣视频免费看 | 亚洲第一天堂av | 激情黄色小说视频 | 久久久久人妻一区精品色 | 亚洲视频欧美视频 | 午夜88 | 欧美精品18videosex性欧美 | a久久久久久 | 福利视频二区 | 国产综合久久久 | 熟睡人妻被讨厌的公侵犯 | 久久精品一区二区三区不卡牛牛 | 亚洲第一色视频 | gogo人体做爰大胆视频 | 亚洲素人 | 一区二区精| caoprom在线视频 | 国产女人毛片 | 亚洲αv | 久久刺激 | 密臀久久| www.蜜臀| 亚洲成成品网站 | 国产看真人毛片爱做a片 | 亚洲av成人无码一区二区三区在线观看 | 成人黄色电影在线 | 国产综合视频一区二区 | 特种兵之深入敌后 | 欧美特黄一级视频 | 美女隐私直播 | 国产精品久久久久久久久免费桃花 | 欧美午夜精品久久久 | 国产午夜一级 | 91国内在线视频 | 欧美精品一区二区三区四区五区 |