android在子线程里读写文件里的经纬度并绘制轨迹,activity销毁时程序崩溃-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

android在子线程里读写文件里的经纬度并绘制轨迹,activity销毁时程序崩溃

2016-06-01 13:33:22 2369 0
public class DrawPathActivity extends BaseActivity {
private MapView mMapView;
private BaiduMap mBaiduMap;
private static final int POINT_COUNT_PER_GROUP = 100;

private LatLng startPoint;

private Handler handler;
private HandlerThread thread;
private Runnable runnable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.draw_path_activity);
    mMapView = (MapView) this.findViewById(R.id.bmapView);
    mBaiduMap = mMapView.getMap();

    thread = new HandlerThread("drawPath");
    thread.start();
    handler = new Handler(thread.getLooper());
    runnable = new Runnable() {
        @Override
        public void run() {
                drawPath();
        }
    };
    handler.post(runnable);
}

/**
 * 绘制轨迹
 */
private void drawPath() {
    FileReader fileReader = null;
    BufferedReader bufferedReader = null;
    ArrayList<LatLng> pointsList = new ArrayList<LatLng>();
    String latlngString = null;
    try {
        fileReader = new FileReader(SystemConstant.FILE_ROOT_DIR + File.separator + SystemConstant.POINT_FILE_NAME);
        bufferedReader = new BufferedReader(fileReader);

        while((latlngString = bufferedReader.readLine()) != null) {
            String[] latlngArray = null;
            latlngArray = latlngString.split(",");
            double lat, lng;
            lat = StringConversionUtil.parseDouble(latlngArray[0], 0);
            lng = StringConversionUtil.parseDouble(latlngArray[1], 0);
            LatLng point = new LatLng(lat, lng);

            if(startPoint == null) {
                startPoint = point;
            }
            //更新地图坐标
            MapStatusUpdate u1 = MapStatusUpdateFactory.newLatLng(startPoint);
            mBaiduMap.setMapStatus(u1);
            //画点
            OverlayOptions ooDot = new DotOptions().center(point).radius(8).color(0xFF0000FF);
            mBaiduMap.addOverlay(ooDot);

            pointsList.add(point);
            //默认100个点为一组,画一次
            if(pointsList.size() >= POINT_COUNT_PER_GROUP) {
                //画线
                OverlayOptions ooPolyline = new PolylineOptions().width(6).color(0xAAFF0000).points(pointsList);
                mBaiduMap.addOverlay(ooPolyline);
                pointsList.clear();
                pointsList.add(point);
            }
        }
        //如果循环结束后,pointsList的个数小于100,直接将剩下的所有点连线
        OverlayOptions ooPolyline = new PolylineOptions().width(6).color(0xAAFF0000).points(pointsList);
        mBaiduMap.addOverlay(ooPolyline);
        pointsList.clear();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            if(bufferedReader != null) {
                bufferedReader.close();
            }
            if(fileReader != null) {
                fileReader.close();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

@Override
protected void onPause() {
    mMapView.onPause();
    super.onPause();
}

@Override
protected void onResume() {
    mMapView.onResume();
    super.onResume();
}

@Override
protected void onDestroy() {

    if (handler != null) {
        handler.removeCallbacks(runnable);
    }
    mMapView.onDestroy();
    super.onDestroy();
}


}

我是在子线程里调用drawPath方法,这个方法主要就是从文件中读出经纬度然后在百度地图上画轨迹,每次执行的时候,如果轨迹没有完全画完就退出,程序就会崩溃,如果一直等待画完再退出,就不会崩溃

取消 提交回答
全部回答(0)
相关问答

8

回答

短视频SDK如何做到视频原始比例裁剪?

EdgePlus 2017-09-13 17:35:01 39968浏览量 回答数 8

323

回答

云伴侣数据导入问题汇总(Android系统)

os_admin 2011-07-26 17:52:15 63531浏览量 回答数 323

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 149004浏览量 回答数 22

15

回答

OSS学院:为什么我的图片会被下载?怎么在线播放影音?

leehon 2013-09-13 16:40:00 35861浏览量 回答数 15

1

回答

2020年了,跨平台开发框架现在怎样了?

问问小秘 2020-04-15 13:23:24 35623浏览量 回答数 1

26

回答

安卓与iOS百问,开发者系统指南

yq传送门 2017-05-31 17:16:00 34870浏览量 回答数 26

25

回答

数据库百问,教你快速上手数据库

yq传送门 2017-06-13 08:01:34 46305浏览量 回答数 25

8

回答

mail.aliyun.com邮箱android手机客户端设置方法

jack_yang 2013-04-24 09:01:34 124220浏览量 回答数 8

46

回答

H5技术百问——不懂H5你就OUT啦

yq传送门 2017-09-09 11:03:04 48507浏览量 回答数 46

7

回答

购买阿里国外的云服务器是否可以访问谷歌?

szray 2016-04-30 12:01:52 33636浏览量 回答数 7
+关注
2
文章
9426
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载