Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
长时间打开Android TV时,谷歌地图会闪烁_Android_Google Maps_Android Tv - Fatal编程技术网

长时间打开Android TV时,谷歌地图会闪烁

长时间打开Android TV时,谷歌地图会闪烁,android,google-maps,android-tv,Android,Google Maps,Android Tv,我有一个android电视应用程序,可以运行很长时间。我有谷歌地图,但20-24小时后谷歌地图开始闪烁。以下链接包含该问题的视频 编辑 我不能共享整个源代码,但我使用了两个片段。一个片段包含地图,另一个片段包含图像的列表视图。我每10秒调用一次web服务,并更新listview图像和绑定地图,其中包含响应web服务的位置 if ( map!=null) { if (activity.ambDetailList.size() > 0) { int i

我有一个android电视应用程序,可以运行很长时间。我有谷歌地图,但20-24小时后谷歌地图开始闪烁。以下链接包含该问题的视频

编辑

我不能共享整个源代码,但我使用了两个片段。一个片段包含地图,另一个片段包含图像的列表视图。我每10秒调用一次web服务,并更新listview图像和绑定地图,其中包含响应web服务的位置

if ( map!=null) {
        if (activity.ambDetailList.size() > 0) {
            int i;
            double dist, currentLat = 0.0, currentLng = 0.0;
            ambOnlineList.clear();
            String ETA, SPEED;

            Marker marker;
            for (i = 0; i < activity.ambDetailList.size(); i++) {
                ambulanceDetail = activity.ambDetailList.get(i);
                dist = Math.sqrt(Math.pow(ambulanceDetail.getCurrentLat() - ambulanceDetail.getDestLat(), 2) + Math.pow(ambulanceDetail.getCurrentLng() - ambulanceDetail.getDestLng(), 2));
                double minute = ((dist * 100) / (ambulanceDetail.getSpeed() * 60 / 1000));
                double speed = ambulanceDetail.getSpeed() * 60 * 60 / 1000;
                Log.i("Minute", "----->>>>" + minute);
                if (speed >= 0.00 && speed <= 1.00) {
                    ETA = activity.getResources().getString(R.string.text_infinity);
                    SPEED = activity.getResources().getString(R.string.text_infinity);
                } else if (minute > 60) {
                    double hour = minute / 60;
                    int roundHour = (int) (minute / 60);
                    int min = (int) ((hour - roundHour) * 60);
                    ETA = roundHour + " hour " + min + " min";
                    SPEED = (int) (ambulanceDetail.getSpeed() * 60 * 60 / 1000) + " km/h ";
                } else {
                    ETA = (int) (minute) + " min ";
                    SPEED = (int) (ambulanceDetail.getSpeed() * 60 * 60 / 1000) + " km/h ";
                }

                ambulanceDetail.setEta(ETA);
                ambulanceDetail.setDisplayETA(ETA);
                ambulanceDetail.setDisplaySpeed(SPEED);

                if (markerList.get(ambulanceDetail.getAmbulanceId()) == null) {
                    MarkerOptions markerOptions = createMarker(ambulanceDetail);
                    marker = map.addMarker(markerOptions);
                    markerList.put(ambulanceDetail.getAmbulanceId(), marker);
                    markerArrayList.add(marker);
                    detailMap.put(marker, ambulanceDetail);
                } else {
                    marker = markerList.get(ambulanceDetail.getAmbulanceId());
                    if (marker.isVisible()) {
                        Location location = new Location("");
                        location.setLatitude(ambulanceDetail.getCurrentLat());
                        location.setLongitude(ambulanceDetail.getCurrentLng());
                        marker.setIcon(BitmapDescriptorFactory.fromBitmap(updateMarkerIcon(ambulanceDetail)));
                        marker.setPosition(new LatLng(ambulanceDetail.getCurrentLat(), ambulanceDetail.getCurrentLng()));
                    }
                }
                ArrayList<Integer> listId = new ArrayList<>();
                for (int m = 0; m < activity.ambDetailList.size(); m++) {
                    listId.add(activity.ambDetailList.get(m).getAmbulanceId());
                }
                for (int k = 0; k < markerArrayList.size(); k++) {
                    Marker m = markerArrayList.get(k);
                    if (!listId.contains(detailMap.get(m).getAmbulanceId())) {
                        markerArrayList.remove(m);
                        markerList.remove(detailMap.get(m).getAmbulanceId());
                        detailMap.remove(m);
                        m.remove();
                    }
                }
            }
            if (markerList.size() == 1 && activity.ambDetailList.size() == 1) {
                map.moveCamera(CameraUpdateFactory.newLatLngZoom(markerList.get(activity.ambDetailList.get(0).getAmbulanceId()).getPosition(), 16));
            } else {
                boundLatLang();
            }
            if (isFirstCall) {
                map.setBuildingsEnabled(true);
                isFirstCall = false;
            }
        } else {
            if (markerArrayList.size() > 0) {
                for (int i = 0; i < markerArrayList.size(); i++) {
                    Marker marker = markerArrayList.get(i);
                    marker.remove();
                }
                markerList.clear();
                markerArrayList.clear();
            }
            map.clear();
            if (detailMap.size() > 0)
                detailMap.clear();
        }
    }
if(map!=null){
if(activity.ambdaillist.size()>0){
int i;
双距离,电流LAT=0.0,电流LNG=0.0;
ambOnlineList.clear();
字符串ETA,速度;
标记;
对于(i=0;i>>>”+分钟);
如果(速度>=0.00和速度60){
双小时=分钟/60;
整数整小时=(整数)(分钟/60);
最小整数=(整数)(小时-整小时)*60);
ETA=整小时+小时+分钟+分钟;
速度=(int)(AmbunceDetail.getSpeed()*60*60/1000)+“公里/小时”;
}否则{
预计到达时间=(整数)(分钟)+“分钟”;
速度=(int)(AmbunceDetail.getSpeed()*60*60/1000)+“公里/小时”;
}
救护车详情:setEta(ETA);
救护车详细信息。设置显示ETA(ETA);
AmbunceDetail.setDisplaySpeed(速度);
if(markerList.get(AmbunceDetail.GetAmbunceId())==null){
MarkerOptions MarkerOptions=createMarker(AmbunceDetail);
marker=map.addMarker(markerOptions);
markerList.put(ambunceDetail.getAmbunceId(),marker);
markerArrayList.add(marker);
详细地图。放置(标记、救护车详细信息);
}否则{
marker=markerList.get(AmbunceDetail.getAmbunceId());
if(marker.isVisible()){
位置=新位置(“”);
location.setLatitude(ambunceDetail.getCurrentLat());
location.setLength(ambunceDetail.getCurrentLng());
setIcon(BitmapDescriptorFactory.fromBitmap(UpdateMarkercon(AmbunceDetail));
marker.setPosition(新LatLng(ambuncedetail.getCurrentLat(),ambuncedetail.getCurrentLng());
}
}
ArrayList listId=新的ArrayList();
for(int m=0;m0){
对于(int i=0;i0)
detailMap.clear();
}
}

无论如何,您可以在map开始闪烁之前重新启动应用程序(或者如果没有帮助的话-重新启动设备),例如在工作15小时后(例如,500次web服务调用):


如果没有源代码,我很难帮助你…请分享你的代码。我已经编辑了我的问题,并在每10秒调用webservice后输入了我正在做的事情的源代码。你从该服务中填写了recyclerview数据吗?@MayurPatel YesI无法重新启动设备或重新启动应用程序,因为这是一个医疗应用程序,需要24 x 7打开。@BhavyaGandhi 1)这只是一个解决方案,而不是解决方案;2) 您的更新间隔为10秒-足以重新启动应用程序;3) 您是否使用或/和其他调试工具?@BhavyaGandhi 4)尝试每秒(或更频繁)模拟web服务调用,并在1000次调用后测试您的应用程序,等等……好的。让我试试
...
Intent restartIntent = getBaseContext().getPackageManager()
         .getLaunchIntentForPackage( getBaseContext().getPackageName() );
restartIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(restartIntent);
...