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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 获取服务对象,android 如何取得正在运行的service对象

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 获取服务对象,android 如何取得正在运行的service对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在寫有關推送的代碼,用的長連接的方式。

具體邏輯:登錄時 啟service,service中啟一個線程,線程中構建一個CommunicateManegr對象,此對象里面有一個BlockingDeque雙端隊列處理包的順序問題, 還有若干線程分別處理心跳包、登錄包、推送消息、其它業務消息、斷線重連、心跳檢測等操作。

初次運行程序,長連接建立起來;然后退出系統,為了保持長連接,后臺服務仍運行。再次運行程序時,需要判斷后臺服務是否仍在運行,仍在運行的話,需要取出之前運行的service對象,添加一些登錄包。

這里的取出之前運行的service對象,如何取出?

不局限與取出之前運行的service對象的問題,是否從一開始 我關于長連接的處理邏輯就有一些理解不當的地方?

偽代碼:

class MyService extends Service{

public CommnicateManager cManager;

@Override

public void onCreate() {

new Thread(new Runnable() {

@Override

public void run() {

CommunicateManager manager = CommunicateManager.getInstance();

cManager = manager;

manager.connect();

manager.add(LoginPackage);//添加登錄包

manager.add(registerPackage);//添加注冊包

manager.startHeardBeatThread();//開啟心跳線程

manager.startCommunicate();//開啟其它線程

}

}.start();

}

}

public class LoginActivtiy extends BaseActivity implements OnClickListener {

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.login:

if (isServiceWork(LoginActivtiy.this,"com.example.service")){//判斷第一次運行的服務是否存在

//TODO: 需要得到第一次運行的服務對象service 如何得到??? manager.add(loginPackage)

}else{

startService(myService);

}

break;

default:

break;

}

}

//判斷某個服務是否正在運行的方法

public boolean isServiceWork(Context mContext, String serviceName) {

boolean isWork = false;

ActivityManager myAM = (ActivityManager) mContext

.getSystemService(Context.ACTIVITY_SERVICE);

List myList = myAM.getRunningServices(200);

// List apps = myAM.getRunningAppProcesses();

if (myList.size() <= 0) {

return false;

}

for (int i = 0; i < myList.size(); i++) {

String mName = myList.get(i).service.getClassName().toString();

if (mName.equals(serviceName)) {

isWork = true;

break;

}

}

return isWork;

}

}

總結

以上是生活随笔為你收集整理的android 获取服务对象,android 如何取得正在运行的service对象的全部內容,希望文章能夠幫你解決所遇到的問題。

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