1.修改血压测量完成后息屏后不会退出APP的bug。
authorkfl_614 <kfl_614@163.com>
Tue, 24 Mar 2020 10:50:00 +0000 (18:50 +0800)
committerkfl_614 <kfl_614@163.com>
Tue, 24 Mar 2020 10:50:00 +0000 (18:50 +0800)
2.修复IcLog e 空指针的bug

app/src/main/AndroidManifest.xml
app/src/main/java/com/ic/blood/BloodActivity.java
app/src/main/java/com/ic/blood/fragment/BloodFragment.java
app/src/main/java/com/ic/blood/presenter/BloodPresenter.java
app/src/main/java/com/ic/blood/util/CrashHandler.java
app/src/main/java/com/ic/blood/util/IcLog.java
app/version_code.properties

index 742cfb2..eb38374 100644 (file)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.ic.blood">
+    package="com.ic.blood"
+    android:sharedUserId="android.uid.system">
 
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
index 3dab665..74a975c 100644 (file)
@@ -5,12 +5,19 @@ import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.os.Bundle;
 
 import com.ic.blood.fragment.BloodFragment;
+import com.ic.blood.util.IcLog;
 
 public class BloodActivity extends AppCompatActivity {
 
+    private static final String TAG = "BloodActivity";
+
     private FragmentManager fragmentManager;
 
     @Override
@@ -19,6 +26,10 @@ public class BloodActivity extends AppCompatActivity {
         setContentView(R.layout.activity_blood);
         fragmentManager = getSupportFragmentManager();
         commitFragment(BloodFragment.newInstance());
+
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+        registerReceiver(screenOnOffReceiver, intentFilter);
     }
 
     private void commitFragment(Fragment fragment) {
@@ -27,5 +38,18 @@ public class BloodActivity extends AppCompatActivity {
         fragmentTransaction.commit();
     }
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        unregisterReceiver(screenOnOffReceiver);
+    }
 
+    private BroadcastReceiver screenOnOffReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
+                finish();
+            }
+        }
+    };
 }
index 8bae956..1fb7923 100644 (file)
@@ -8,6 +8,8 @@ import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import androidx.lifecycle.ViewModelProvider;
 
+import android.os.Handler;
+import android.os.Message;
 import android.os.PowerManager;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -21,6 +23,7 @@ import com.ic.blood.model.BloodCheckModel;
 import com.ic.blood.util.IcLog;
 
 import java.io.IOException;
+import java.lang.ref.WeakReference;
 
 import pl.droidsonroids.gif.GifDrawable;
 import pl.droidsonroids.gif.GifImageView;
@@ -42,6 +45,8 @@ public class BloodFragment extends Fragment {
 
     private GifDrawable gifFromAssets;
 
+    private DelayExecuteHandler delayHandler;
+
     public static BloodFragment newInstance() {
         return new BloodFragment();
     }
@@ -57,6 +62,7 @@ public class BloodFragment extends Fragment {
         super.onCreate(savedInstanceState);
         mApp = (BloodApp) mContext.getApplicationContext();
         initWakeLock(mContext);
+        delayHandler = new DelayExecuteHandler(this);
     }
 
     @Override
@@ -79,8 +85,6 @@ public class BloodFragment extends Fragment {
             mWakeLock.acquire();
         }
 
-        //bloodModel.startCheckBlood();
-
         gifFromAssets.start();
     }
 
@@ -95,30 +99,24 @@ public class BloodFragment extends Fragment {
 
     private void initBloodModel() {
         BloodCheckModel.Factory factory = new BloodCheckModel.Factory(mApp);
-        bloodModel= new ViewModelProvider(this, factory).get(BloodCheckModel.class);
+        bloodModel = new ViewModelProvider(this, factory).get(BloodCheckModel.class);
         bloodModel.getObsBloodValue().observe(getViewLifecycleOwner(), value -> {
             bloodBinding.setIsShowTips(false);
             bloodBinding.setHighValue(value[0]);
             bloodBinding.setLowValue(value[1]);
             bloodBinding.setHeartValue(value[2]);
+            delayHandler.sendMessageDelayed(new Message(),6000);
         });
 
-        bloodModel.getObsTipsInfo().observe(getViewLifecycleOwner(),tips ->{
+        bloodModel.getObsTipsInfo().observe(getViewLifecycleOwner(), tips -> {
             bloodBinding.setIsShowTips(true);
             bloodBinding.setTopTips(tips[0]);
             bloodBinding.setBottomTips(tips[1]);
         });
 
-        bloodModel.getObsCheckEnd().observe(getViewLifecycleOwner(),end ->{
-            switch (end){
-                case 1:
-                    IcLog.i(TAG,"Release WakeLock");
-                    releaseWakeLock();
-                    break;
-                case 2:
-                    ((BloodActivity)mContext).finish();
-                    break;
-            }
+        bloodModel.getObsCheckEnd().observe(getViewLifecycleOwner(), end -> {
+            IcLog.i(TAG, "finish");
+            ((BloodActivity) mContext).finish();
         });
     }
 
@@ -131,6 +129,7 @@ public class BloodFragment extends Fragment {
     }
 
     private void releaseWakeLock() {
+        IcLog.i(TAG, "Release WakeLock");
         if (mWakeLock != null) {
             mWakeLock.release();
         }
@@ -151,7 +150,7 @@ public class BloodFragment extends Fragment {
     @Override
     public void onDestroy() {
         super.onDestroy();
-        IcLog.i(TAG,"onDestroy");
+        IcLog.i(TAG, "onDestroy");
 
         bloodModel.unregisterScreenReceiver();
         bloodModel = null;
@@ -159,5 +158,21 @@ public class BloodFragment extends Fragment {
         if (gifFromAssets != null) {
             gifFromAssets.recycle();
         }
+
+        delayHandler=null;
+    }
+
+    private static class DelayExecuteHandler extends Handler {
+        private final WeakReference<BloodFragment> mFragment;
+
+        public DelayExecuteHandler(BloodFragment fragment) {
+            mFragment = new WeakReference<BloodFragment>(fragment);
+        }
+
+        @Override
+        public void dispatchMessage(@NonNull Message msg) {
+            super.dispatchMessage(msg);
+            mFragment.get().releaseWakeLock();
+        }
     }
 }
index d0288f9..6bbc7da 100644 (file)
@@ -36,8 +36,6 @@ public class BloodPresenter {
 
     private SparseArray<String> mTipsSpares;
 
-    private Handler mHandler;
-
     public BloodPresenter(Context context) {
         this.mContext = context;
         mTipsSpares = new SparseArray<String>();
@@ -53,8 +51,6 @@ public class BloodPresenter {
         mObsBloodValue = new MutableLiveData<>();
         mObsTipsInfo = new MutableLiveData<>();
         mObsCheckEnd = new MutableLiveData<>();
-
-        mHandler = new Handler();
     }
 
     public MutableLiveData<String[]> getObsBloodValue() {
@@ -70,30 +66,23 @@ public class BloodPresenter {
     }
 
     public void registerScreenReceiver() {
-
         ServiceUtil.bindServiceUtil(mContext, "com.ic.action.WORK_SERVICE", connection, mContext.getPackageName());
-
-        IntentFilter intentFilter = new IntentFilter();
-        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
-        mContext.registerReceiver(screenOnOffReceiver, intentFilter);
     }
 
     public void unregisterScreenReceiver() {
-
-        mContext.unregisterReceiver(screenOnOffReceiver);
-
         try {
-            mService.unregisterCallback(bloodInterface);
+            if(mService != null){
+                mService.unregisterCallback(bloodInterface);
+            }
             ServiceUtil.unBindServiceUtil(mContext, connection);
         } catch (Exception e) {
-            IcLog.e(TAG, e.getMessage());
+            IcLog.e(TAG, "unregisterScreenReceiver",e);
         }finally {
             mService=null;
             bloodInterface=null;
         }
 
         connection = null;
-        mHandler = null;
     }
 
     public void startCheckBlood() {
@@ -101,7 +90,7 @@ public class BloodPresenter {
             try {
                 mService.startCheckBlood();
             } catch (Exception e) {
-                IcLog.e(TAG, e.getMessage());
+                IcLog.e(TAG, "startCheckBlood",e);
             }
         }
     }
@@ -111,7 +100,7 @@ public class BloodPresenter {
             try {
                 mService.stopCheckBlood();
             } catch (Exception e) {
-                IcLog.e(TAG, e.getMessage());
+                IcLog.e(TAG, "stopCheckBlood",e);
             }
         }
     }
@@ -132,15 +121,7 @@ public class BloodPresenter {
         }
     }
 
-    private BroadcastReceiver screenOnOffReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
-                IcLog.i(TAG, "灭屏了");
-                mObsCheckEnd.setValue(2);
-            }
-        }
-    };
+
 
 
     private ServiceConnection connection = new ServiceConnection() {
@@ -151,7 +132,7 @@ public class BloodPresenter {
                 mService.registerCallback(bloodInterface);
                 startCheckBlood();
             } catch (Exception e) {
-                IcLog.e(TAG, e.getMessage());
+                IcLog.e(TAG, "ServiceConnection",e);
             }
         }
 
@@ -164,7 +145,6 @@ public class BloodPresenter {
         @Override
         public void updateBloodCheckResult(int high, int low, int heart) throws RemoteException {
             updateBoolValue(high, low, heart);
-            mHandler.postDelayed(() -> mObsCheckEnd.postValue(1), 10 * 1000);
         }
 
         @Override
index 6272aae..e9fd03f 100644 (file)
@@ -193,10 +193,10 @@ public class CrashHandler implements Thread.UncaughtExceptionHandler {
         sb.append("\n\n");
 
         try {
-            String fileName = "IcHardware-" + dateFormatDate.format(new Date()) + ".log";
+            String fileName = "IcBlood-" + dateFormatDate.format(new Date()) + ".log";
             if (Environment.getExternalStorageState().equals(
                     Environment.MEDIA_MOUNTED)) {
-                File dir = new File(Environment.getExternalStorageDirectory().getPath(), "Android/ic/crash/IcHardware");
+                File dir = new File(Environment.getExternalStorageDirectory().getPath(), "Android/ic/crash/IcBlood");
                 String path = dir.getPath();
                 if (!dir.exists()) {
                     dir.mkdirs();
index 84b870e..8417ff1 100644 (file)
@@ -2,6 +2,8 @@ package com.ic.blood.util;
 
 import android.util.Log;
 
+import com.ic.blood.BuildConfig;
+
 /**
  * @author RyanLee
  * @date 2018/2/2
@@ -10,7 +12,7 @@ import android.util.Log;
 public class IcLog {
 
     private static final String DOT = ".";
-    private static boolean isDebug = true;
+    private static boolean isDebug = BuildConfig.DEBUG;
     private static String tagHead = "";
 
     public static void v(String tag, String msg) {
@@ -37,9 +39,9 @@ public class IcLog {
         }
     }
 
-    public static void e(String tag, String msg) {
+    public static void e(String tag, String msg,Throwable tr) {
         if (isDebug) {
-            Log.e(mergeHeadTag(tag), msg);
+            Log.e(mergeHeadTag(tag), msg,tr);
         }
     }
 
index 463e77d..8ce91d1 100644 (file)
@@ -1,2 +1,2 @@
-#Mon Mar 23 19:02:46 CST 2020
-VERSION_CODE=13
+#Tue Mar 24 16:42:06 CST 2020
+VERSION_CODE=14