Browse Source

修改10分钟清一次缓存,清理10次之后重载一次webview页面

weizhengliang 2 years ago
parent
commit
501096deb1

+ 19 - 8
app/src/main/java/com/example/informationkanban/MainActivity.java

@@ -2,25 +2,20 @@ package com.example.informationkanban;
 
 import androidx.appcompat.app.AppCompatActivity;
 
-import android.annotation.SuppressLint;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.os.Build;
 import android.os.Bundle;
-import android.os.Handler;
 import android.text.TextUtils;
 import android.text.format.Time;
-import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
 import android.view.WindowManager;
+import android.webkit.WebChromeClient;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
@@ -50,6 +45,7 @@ public class MainActivity extends AppCompatActivity {
     private static String[] weeks = new String[]{"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
 
     private int hours = 8;
+    private int freeTimes = 0;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -153,6 +149,16 @@ public class MainActivity extends AppCompatActivity {
             }
         });
 
+        webView.setWebChromeClient(new WebChromeClient() {
+            @Override
+            public void onProgressChanged(WebView view, int newProgress) { //显示加载进度
+
+                Log.d(TAG, "load webview..." + newProgress + "%");
+                //loadview.setText(getString(R.string.loading_percent, newProgress));
+                //loadview.setVisibility((newProgress > 0 && newProgress < 100) ? View.VISIBLE : View.GONE);
+            }
+        });
+
     }
 
     //点击返回上一页面而不是退出浏览器
@@ -209,8 +215,9 @@ public class MainActivity extends AppCompatActivity {
         Log.e("间隔的秒数",(nowTimes / 1000) - (saveTimes / 1000)+"");
 
         if (nowTimes - saveTimes >= 600000 /*(nowTimes / 1000 / 60 / 60) - (saveTimes / 1000 / 60 / 60) >= hours*/) {
-            Log.d("updateTime", "free webview...");
+            Log.e("updateTime", "free webview..." + freeTimes);
             NetFunctionConfig.setTime(nowTime);
+            freeTimes++;
 
             if (webView != null) {
                 webView.clearHistory();
@@ -218,7 +225,11 @@ public class MainActivity extends AppCompatActivity {
                 webView.clearCache(false);
                 webView.freeMemory();
                 //webView.loadUrl("http://192.168.101.1:8100/index?mac=" + MAC);
-                webView.reload();
+
+                if (freeTimes >= 10) {
+                    freeTimes = 0;
+                    webView.reload();
+                }
             }
 
             //finish();

+ 1 - 0
app/src/main/java/com/example/informationkanban/utils/NetFunctionConfig.java

@@ -24,6 +24,7 @@ public class NetFunctionConfig {
 
     private static final String default_server_ip = "172.28.100.100";
     //private static final String default_server_ip = "8.129.220.143";
+    //private static final String default_server_ip = "119.23.151.229";
     private static final String default_server_port = "8100";
 
     public static void setWebviewType(int type) {

+ 234 - 0
app/src/main/java/com/example/informationkanban/view/SplashView.java

@@ -0,0 +1,234 @@
+package com.example.informationkanban.view;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.RectF;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.animation.AnticipateInterpolator;
+import android.view.animation.LinearInterpolator;
+
+import androidx.annotation.Nullable;
+
+import com.example.informationkanban.R;
+
+/**
+ * 加载动画
+ */
+public class SplashView extends View {
+    //小球颜色
+    private int[] colors;
+    //不断旋转的圆的半径
+    private final float radiusRotate = 60;
+    //控件中心坐标
+    private float centerX, centerY;
+    private Paint mPaint;
+    //动画执行对象
+    private State mState;
+    private ValueAnimator mAnimator;
+    //动画旋转的角度
+    private float animeAngle;
+    //小球半径
+    private float smallRadius = 8;
+    //聚合动画的半径
+    private float radiusMerge;
+    //背景paint
+    Paint bgPaint;
+    private float radiusExpand;
+    private RectF viewRect;
+
+
+    public SplashView(Context context) {
+        this(context, null);
+    }
+
+    public SplashView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public SplashView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init(context);
+    }
+
+    private void init(Context context) {
+        //关闭硬件加速
+        setLayerType(LAYER_TYPE_SOFTWARE, null);
+        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+
+        bgPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        bgPaint.setColor(Color.parseColor("#00000000"));
+
+        colors = context.getResources().getIntArray(R.array.splash_circle_colors);
+        radiusMerge = radiusRotate;
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+        centerX = w / 2f;
+        centerY = h / 2f;
+
+        //viewRect = new RectF(0, 0, getWidth(), getHeight());
+        viewRect = new RectF(0, 0, w, h);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        if (mState == null) {
+            mState = new RotateState();
+        }
+
+        mState.draw(canvas);
+    }
+
+    private void drawCircles(Canvas canvas) {
+        //初始角度,将360度平分给每个小球
+        float initAngle = (float) (2 * Math.PI / colors.length);
+
+        for (int i = 0; i < colors.length; i++) {
+            mPaint.setColor(colors[i]);
+            double angle = i * initAngle + animeAngle;
+            float x = (float) (Math.cos(angle) * radiusMerge + centerX);
+            float y = (float) (Math.sin(angle) * radiusMerge + centerY);
+            canvas.drawCircle(x, y, smallRadius, mPaint);
+        }
+    }
+
+    private void drawBackground(Canvas canvas) {
+        if (mState instanceof ExpandState) {
+            //画目标圆
+            canvas.drawCircle(centerX, centerY, radiusExpand, bgPaint);
+            bgPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
+            canvas.drawRect(viewRect, bgPaint);
+        } else {
+            canvas.drawRect(viewRect, bgPaint);
+        }
+    }
+
+    /**
+     * 结束加载
+     */
+    public void finshSplash() {
+        if (mState != null) {
+            ((RotateState) mState).cancel();
+        }
+    }
+
+    /**
+     * 状态标准化接口
+     */
+    interface State {
+        void draw(Canvas canvas);
+    }
+
+    /**
+     * 旋转动画
+     */
+    class RotateState implements State {
+
+        public RotateState() {
+            mAnimator = ValueAnimator.ofFloat((float) (2 * Math.PI));
+            mAnimator.setDuration(1000);
+            mAnimator.setRepeatCount(ValueAnimator.INFINITE);
+            mAnimator.setInterpolator(new LinearInterpolator());
+            mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    animeAngle = (float) animation.getAnimatedValue();
+                    postInvalidate();
+                }
+            });
+            mAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationCancel(Animator animation) {
+                    mState = new MegreState();
+                }
+            });
+            mAnimator.start();
+        }
+
+        @Override
+        public void draw(Canvas canvas) {
+            drawBackground(canvas);
+            drawCircles(canvas);
+        }
+
+        public void cancel() {
+            if (mAnimator != null && mAnimator.isRunning())
+                mAnimator.cancel();
+        }
+    }
+
+    /**
+     * 聚合动画
+     */
+    class MegreState implements State {
+
+        public MegreState() {
+            mAnimator = ValueAnimator.ofFloat(radiusRotate, 0f);
+            mAnimator.setDuration(1000);
+            mAnimator.setInterpolator(new AnticipateInterpolator(5));
+            mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    radiusMerge = (float) animation.getAnimatedValue();
+                    postInvalidate();
+                }
+            });
+            mAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mState = new ExpandState();
+                }
+            });
+            mAnimator.start();
+        }
+
+        @Override
+        public void draw(Canvas canvas) {
+            drawBackground(canvas);
+            drawCircles(canvas);
+        }
+    }
+
+    /**
+     * 扩散动画
+     */
+    class ExpandState implements State {
+
+        public ExpandState() {
+            float width = (float) Math.hypot(centerX, centerY);
+            mAnimator = ValueAnimator.ofFloat(width);
+            mAnimator.setDuration(1500);
+            mAnimator.setInterpolator(new LinearInterpolator());
+            mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+                    radiusExpand = (float) animation.getAnimatedValue();
+                    postInvalidate();
+                }
+            });
+            mAnimator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    setVisibility(GONE);
+                }
+            });
+            mAnimator.start();
+        }
+
+        @Override
+        public void draw(Canvas canvas) {
+            drawBackground(canvas);
+        }
+    }
+}

+ 4 - 1
app/src/main/res/values-zh-rCN/strings.xml

@@ -1,5 +1,6 @@
 <resources>
-    <string name="app_name">InfoBoard2</string>
+    <string name="app_name">信息看板2</string>
+    <!--<string name="app_name">输液看板</string>-->
 
     <string name="setting_language">语言设置</string>
     <string name="setting_change_server">修改服务器地址</string>
@@ -17,4 +18,6 @@
     <string name="str_connect_fail">服务器连接失败</string>
     <string name="tips_server_connect_error">服务器连接失败,请检查网络</string>
     <string name="tips_device_info_error">设备信息获取失败</string>
+
+    <string name="loading_percent">加载中...%d%%</string>
 </resources>

+ 17 - 0
app/src/main/res/values/colors.xml

@@ -8,4 +8,21 @@
     <color name="color_picker_background_color">#FFFFFF</color>
     <color name="dropdown_divider_color">#E5E5E5</color>
     <color name="dropdown_dark_divider_color">#C0C0C0</color>
+
+    <color name="splash_bg">#00000000</color>
+    <color name="orange">#FF9600</color>
+    <color name="aqua">#02D1AC</color>
+    <color name="yellow">#FFD200</color>
+    <color name="blue">#00C6FF</color>
+    <color name="green">#00E099</color>
+    <color name="pink">#FF3892</color>
+
+    <array name="splash_circle_colors">
+        <item>@color/blue</item>
+        <item>@color/green</item>
+        <item>@color/pink</item>
+        <item>@color/orange</item>
+        <item>@color/aqua</item>
+        <item>@color/yellow</item>
+    </array>
 </resources>

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -17,4 +17,6 @@
     <string name="str_connect_fail">Connect server failed</string>
     <string name="tips_server_connect_error">Connect server failed, please check network</string>
     <string name="tips_device_info_error">Get device info error</string>
+
+    <string name="loading_percent">loading...%d%%</string>
 </resources>