lizhanwei
2020-01-21 aff3ecab64dd259fdbbf8382dc02325b46d7b4d1
修改地图为单线程绘制,收到的数据放入队列
1个文件已修改
130 ■■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
@@ -6,8 +6,8 @@
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
@@ -15,7 +15,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -27,11 +26,11 @@
import com.google.gson.reflect.TypeToken;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import me.yokeyword.fragmentation.SupportFragment;
import safeluck.drive.evaluation.Constant;
@@ -40,7 +39,6 @@
import safeluck.drive.evaluation.bean.RealTimeCarPos;
import safeluck.drive.evaluation.cEventCenter.CEventCenter;
import safeluck.drive.evaluation.cEventCenter.ICEventListener;
import safeluck.drive.evaluation.util.CThreadPoolExecutor;
import safeluck.drive.evaluation.util.FileUtil;
@@ -80,6 +78,9 @@
            , {9.278, -1.5330000000000004}, {9.277999999999999, 1.467000000000001}};
    Gson gson;
    private LinearLayout linearLayout;//surfaceview的父容器,为了移动surfaceview而使用,因为scrollto不能移动view,
    private LinkedBlockingQueue queue = new LinkedBlockingQueue(100);
    private ExecutorService producer = Executors.newSingleThreadExecutor();
    private ExecutorService consumer = Executors.newSingleThreadExecutor();
    @Nullable
@@ -88,6 +89,7 @@
        View view = inflater.inflate(R.layout.layout_mapfragment, container, false);
        gson = new Gson();
        initView(view);
        consumer.execute(new CalRunnable());
        return view;
    }
@@ -282,12 +284,12 @@
                    pathText.lineTo(700, 30);
                    canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成
                }
                if (osd3 != null) {
                    Path pathText = new Path();
                    pathText.moveTo(10, 240);
                    pathText.lineTo(700, 130);
                    canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成
                }
//                if (osd3 != null) {
//                    Path pathText = new Path();
//                    pathText.moveTo(10, 240);
//                    pathText.lineTo(700, 130);
//                    canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成
//                }
                // 提交画布
                Canvas canvas = holder.lockCanvas();
@@ -329,54 +331,87 @@
    int line = 0;
    int map_line = 0;
    private StringBuffer stringBuffer = new StringBuffer();
    class MessageRemoteService{
        public int msgCode;
        public String json;
        public MessageRemoteService(int msgCode, Object obj) {
            this.json = (String) obj;
            this.msgCode = msgCode;
        }
    }
    private ICEventListener icEventListener = new ICEventListener() {
        @Override
        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
        public void onCEvent(String topic, final int msgCode, int resultCode, final Object obj) {
            CThreadPoolExecutor.runInBackground(new CalRunnable(msgCode,(String)obj));
//            CThreadPoolExecutor.runInBackground(new CalRunnable(msgCode,(String)obj));
            producer.execute(new Runnable() {
                @Override
                public void run() {
                    queue.offer(new MessageRemoteService(msgCode,obj));
                }
            });
        }
    };
    boolean flag = true;
    class CalRunnable implements Runnable{
        private String json;
        private int cmd;
        public CalRunnable(int cmd,String obj) {
           this.json = obj;
           this.cmd = cmd;
        }
//        public CalRunnable(int cmd,String obj) {
//           this.json = obj;
//           this.cmd = cmd;
//        }
        @Override
        public void run() {
            while (flag){
                MessageRemoteService messageRemoteService = (MessageRemoteService) queue.peek();
                if (messageRemoteService == null){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                messageRemoteService = (MessageRemoteService) queue.poll();
                if (messageRemoteService != null){
                    this.cmd = messageRemoteService.msgCode;
                    this.json = messageRemoteService.json;
            MyLog.i(TAG, json);
            if (!(cmd == Constant.REAL_TIME_CAR_POS)){
                if (cmd == Constant.DEBUG_RTCM){
                    stringBuffer.append("\tRTCM:");
                    try {
                        JSONObject jsonObject = new JSONObject(json);
                        int length = jsonObject.getInt("length");
                        stringBuffer.append(length);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                if (cmd == Constant.DEBUG_TXT){
                    try {
                        JSONObject jsonObject = new JSONObject(json);
                        String info = jsonObject.getString("info");
                        stringBuffer.append("\tinfo:");
                        stringBuffer.append(info);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
//            if (!(cmd == Constant.REAL_TIME_CAR_POS)){
//                if (cmd == Constant.DEBUG_RTCM){
//                    stringBuffer.append("\tRTCM:");
//                    try {
//                        JSONObject jsonObject = new JSONObject(json);
//                        int length = jsonObject.getInt("length");
//                        stringBuffer.append(length);
//                    } catch (JSONException e) {
//                        e.printStackTrace();
//                    }
//                }
//                if (cmd == Constant.DEBUG_TXT){
//                    try {
//                        JSONObject jsonObject = new JSONObject(json);
//                        String info = jsonObject.getString("info");
//                        stringBuffer.append("\tinfo:");
//                        stringBuffer.append(info);
//                    } catch (JSONException e) {
//                        e.printStackTrace();
//                    }
//
//                }
//            }
//            osd3 = stringBuffer.toString();
//            if (osd3!=null && osd3.contains("info:")&&osd3.contains("RTCM:")){
//
//                stringBuffer.delete(0,stringBuffer.length());
//            }
                }
            }
            osd3 = stringBuffer.toString();
            if (osd3!=null && osd3.contains("info:")&&osd3.contains("RTCM:")){
                stringBuffer.delete(0,stringBuffer.length());
            }
            RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class);
            List<Double> points = timeCarPos.getPoint();
            switch (timeCarPos.getMove()){
@@ -453,6 +488,10 @@
            }
            DrawMap(map,car);
        }
            }
        }
    }
    @Override
    public void onAttach(Context context) {
@@ -463,6 +502,9 @@
    @Override
    public void onDetach() {
        super.onDetach();
        flag = false;
        producer.shutdown();
        consumer.shutdown();
        CEventCenter.onBindEvent(false, icEventListener, Constant.REAL_TIME_POS_CAR_TOPIC);
    }
}