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对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡审核会问什么 信用卡审核问什么问题
- 下一篇: 信用卡审核没过怎么办 信用卡为什么不能通