Commit 50eab62765ba88eb91fe9658333e6221444fcfa8

Authored by wugian
1 parent 672f1efb

当清空内存后m,若服务已启动,则启动主页以方便开门及灯光控制

  1 +package com.gimi.common.cinema.utils;
  2 +
  3 +import android.annotation.TargetApi;
  4 +import android.app.Activity;
  5 +import android.os.Build;
  6 +
  7 +import java.util.HashMap;
  8 +import java.util.LinkedHashMap;
  9 +import java.util.Map.Entry;
  10 +import java.util.Set;
  11 +
  12 +/**
  13 + * Author: jack
  14 + * Description:管理所有的栈中的Activity
  15 + */
  16 +public class ActivityCollector {
  17 +
  18 + /**
  19 + * 存放activity的列表
  20 + */
  21 + public static HashMap<Class<?>, Activity> activities = new LinkedHashMap<>();
  22 +
  23 + /**
  24 + * 添加Activity
  25 + *
  26 + * @param activity
  27 + */
  28 + public static void addActivity(Activity activity, Class<?> clz) {
  29 + activities.put(clz, activity);
  30 + }
  31 +
  32 + /**
  33 + * 判断一个Activity 是否存在
  34 + *
  35 + * @param clz
  36 + * @return
  37 + */
  38 + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
  39 + public static <T extends Activity> boolean isActivityExist(Class<T> clz) {
  40 + boolean res;
  41 + Activity activity = getActivity(clz);
  42 + if (activity == null) {
  43 + res = false;
  44 + } else {
  45 + if (activity.isFinishing() || activity.isDestroyed()) {
  46 + res = false;
  47 + } else {
  48 + res = true;
  49 + }
  50 + }
  51 +
  52 + return res;
  53 + }
  54 +
  55 + /**
  56 + * 获得指定activity实例
  57 + *
  58 + * @param clazz Activity 的类对象
  59 + * @return
  60 + */
  61 + public static <T extends Activity> T getActivity(Class<T> clazz) {
  62 + return (T) activities.get(clazz);
  63 + }
  64 +
  65 + /**
  66 + * 移除activity,代替finish
  67 + *
  68 + * @param activity
  69 + */
  70 + public static void removeActivity(Activity activity) {
  71 + if (activities.containsValue(activity)) {
  72 + activities.remove(activity.getClass());
  73 + }
  74 + }
  75 +
  76 + /**
  77 + * 移除所有的Activity
  78 + */
  79 + public static void removeAllActivity() {
  80 + if (activities != null && activities.size() > 0) {
  81 + Set<Entry<Class<?>, Activity>> sets = activities.entrySet();
  82 + for (Entry<Class<?>, Activity> s : sets) {
  83 + if (!s.getValue().isFinishing()) {
  84 + s.getValue().finish();
  85 + }
  86 + }
  87 + }
  88 + activities.clear();
  89 + }
  90 +}
\ No newline at end of file
... ...
... ... @@ -10,11 +10,13 @@ import android.util.Log;
10 10 import android.widget.Toast;
11 11 import com.gimi.common.cinema.model.MessageEvent;
12 12 import com.gimi.common.cinema.model.RoomInfo;
  13 +import com.gimi.common.cinema.utils.ActivityCollector;
13 14 import com.gimi.common.cinema.utils.SystemUtils;
14 15 import com.gimi.common.cinema.utils.Utils;
15 16 import com.google.gson.Gson;
16 17 import com.google.gson.JsonSyntaxException;
17 18 import com.qnbar.smc.utils.LightOperationUtils;
  19 +import com.xgimi.gimicinema.activity.MainActivity;
18 20 import com.xgimi.gimicinema.activity.QrCodeShowActivity;
19 21 import com.xgimi.gimicinema.application.FangTangApplication;
20 22 import com.xgimi.smartscreen.encrypt.AuthCode;
... ... @@ -113,7 +115,21 @@ public class SocketService1 extends Service {
113 115 }
114 116 };
115 117
116   - private long sendTime = 0L;
  118 + int mainChargeCount = 0;
  119 + private Runnable startMainRunnable = new Runnable() {
  120 + @Override
  121 + public void run() {
  122 + if (ActivityCollector.getActivity(MainActivity.class) == null) {
  123 + Log.d(TAG, "do start main activity");
  124 + Intent intent = new Intent(context, MainActivity.class);
  125 + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  126 + startActivity(intent);
  127 + } else {
  128 + Log.d(TAG, "already start main activity");
  129 + }
  130 + }
  131 + };
  132 +
117 133 private Context context;
118 134
119 135 @Override
... ... @@ -182,7 +198,6 @@ public class SocketService1 extends Service {
182 198 String message = msg;
183 199 os.write(message.getBytes());
184 200 os.flush();
185   - sendTime = System.currentTimeMillis();//每次发送成数据,就改一下最后成功发送的时间,节省心跳间隔时间
186 201 } else {
187 202 return false;
188 203 }
... ... @@ -291,7 +306,16 @@ public class SocketService1 extends Service {
291 306 Log.d(TAG, "verify success start heart beat");
292 307 break;
293 308 case HEART_BEAT_SUCCESS:
294   - Log.d(TAG, "HEART_BEAT_SUCCESS");
  309 + //每成功5次心跳判定是否启动main activity
  310 + if (++mainChargeCount == 5) {
  311 + mainChargeCount = 0;
  312 + if (ActivityCollector.getActivity(MainActivity.class) == null) {
  313 + Log.d(TAG, "charge start main activity");
  314 + mHandler.postDelayed(startMainRunnable, 3 * 1000);
  315 + }
  316 + }
  317 + boolean serviceLaunched = ActivityCollector.getActivity(MainActivity.class) != null;
  318 + Log.d(TAG, "HEART_BEAT_SUCCESS,MainActivity Launched:" + serviceLaunched);
295 319 break;
296 320 case HEART_BEAT_ERROR_SYMBOL:
297 321 case ROOM_SN_CONNECTED:
... ...
... ... @@ -4,6 +4,7 @@ import android.app.Activity;
4 4 import android.content.Intent;
5 5 import android.os.Bundle;
6 6 import android.view.MotionEvent;
  7 +import com.gimi.common.cinema.utils.ActivityCollector;
7 8 import com.gimi.common.cinema.utils.LeeImageLoader;
8 9 import com.gimi.common.cinema.utils.SystemUtils;
9 10 import com.umeng.analytics.MobclickAgent;
... ... @@ -21,6 +22,7 @@ public class BaseActivity extends Activity {
21 22 protected void onCreate(Bundle savedInstanceState) {
22 23 // setBaseTheme();
23 24 super.onCreate(savedInstanceState);
  25 + ActivityCollector.addActivity(this, getClass());
24 26 MobclickAgent.setDebugMode(true);
25 27
26 28 }
... ... @@ -34,6 +36,7 @@ public class BaseActivity extends Activity {
34 36 protected void onDestroy() {
35 37 super.onDestroy();
36 38 LeeImageLoader.clearCache(this);
  39 + ActivityCollector.removeActivity(this);
37 40 }
38 41
39 42 // private void setBaseTheme() {
... ...
Please register or login to post a comment