Android 使用当前位置,系统在ICS上崩溃

Android 使用当前位置,系统在ICS上崩溃,android,maps,location,android-mapview,android-4.0-ice-cream-sandwich,Android,Maps,Location,Android Mapview,Android 4.0 Ice Cream Sandwich,我正在努力学习定位服务的基础知识,并用“别针”来标记位置 我不确定这是否是最好的方法,或者有什么替代方案。哪种方法更好,或者更简单?或者什么是标准方式 此外,当我在ICS4.0.3上运行此应用程序时,手机几分钟后就会冻结。它一开始工作正常,并向我显示位置,但最终整个设备变得无响应。我已经检查了logcat和last_kmsg,找不到任何关于导致这种情况的线索。Gingerbread 2.3.6运行代码没有问题(至少15分钟内没有崩溃,而ICS在1~5分钟内崩溃) 这似乎不是一个例外,所以这可能是

我正在努力学习定位服务的基础知识,并用“别针”来标记位置

我不确定这是否是最好的方法,或者有什么替代方案。哪种方法更好,或者更简单?或者什么是标准方式

此外,当我在ICS4.0.3上运行此应用程序时,手机几分钟后就会冻结。它一开始工作正常,并向我显示位置,但最终整个设备变得无响应。我已经检查了logcat和last_kmsg,找不到任何关于导致这种情况的线索。Gingerbread 2.3.6运行代码没有问题(至少15分钟内没有崩溃,而ICS在1~5分钟内崩溃)

这似乎不是一个例外,所以这可能是内存泄漏或内核死机?我不确定如何开始调试:\

任何帮助都将不胜感激

我正在使用以下代码:

Mapper.java:

公共类映射器扩展映射活动{
地图视图;
位置经理lm;
地点:L;
地质点p;
地图控制器;
地图覆盖;
列表lol;
创建时的公共void(Bundle x){
super.onCreate(x);
setContentView(R.layout.mapper);
mapView=(mapView)findViewById(R.id.mapView);
mapView.SetBuilTinZoomControl(真);
mc=mapView.getController();
lol=mapView.getOverlays();
overlay=新的MapOverlay();
lm=(LocationManager)getSystemService(Context.LOCATION\u服务);
ll=新的MyLocationListener();
mapView.invalidate();
}
私有类MyLocationListener实现LocationListener{
位置更改后的公共无效(位置loc){
如果(loc!=null){
intlat=(int)(loc.getLatitude()*1E6);
int lon=(int)(loc.getLongitude()*1E6);
p=新的地质点(纬度、经度);
司马迁(p),;
mc.setZoom(18);
lol.clear();
lol.add(覆盖);
}
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
public void onStatusChanged(字符串提供程序、int状态、Bundle extra){
//TODO自动生成的方法存根
}
}
恢复时公开作废(){
super.onResume();
lm.RequestLocationUpdate(LocationManager.NETWORK_提供程序,0,0,ll);
}
公共无效暂停(){
super.onPause();
lm.删除更新(ll);
}
受保护的布尔值isRouteDisplayed(){
返回false;
}
私有类MapOverlay扩展了com.google.android.maps.Overlay{
公共布尔绘制(画布画布、MapView mv、布尔阴影、长时间){
超级绘画(画布、mv、阴影);
点sp=新点();
mv.getProjection().toPixels(p,sp);
位图pic=BitmapFactory.decodeResource(getResources(),R.drawable.image1);
canvas.drawBitmap(pic、sp.x、sp.y、null);
canvas.drawBitmap(pic,sp.x+60,sp.y,null);
画布.绘图位图(pic,sp.x-60,sp.y,空);
canvas.drawBitmap(pic,sp.x,sp.y+60,null);
canvas.drawBitmap(pic,sp.x,sp.y-60,null);
返回true;
}
}
}
mapper.xml:


AndroidManifest.xml:


"

你不需要太多的代码来显示你的位置,谷歌已经有了一个覆盖层。 试试这个,它可能会有帮助:

public class Mapper extends MapActivity{
    com.google.android.maps.MyLocationOverlay myLocationOverlay;

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

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

    @Override
    public void onCreate(Bundle x){
        ...
        setupMyLocation();
        ...
    }

    protected void setupMyLocation(){
        myLocationOverlay = new MyLocationOverlay(this, mapView);
        myLocationOverlay.enableMyLocation();
        myLocationOverlay.runOnFirstFix(new Runnable() {
            public void run() {
                mapView.getOverlays().add(myLocationOverlay);
            }
        });
    }
}

你有关于崩溃的日志吗?你是在设备上还是在模拟器上这样做的?
public class Mapper extends MapActivity{
    com.google.android.maps.MyLocationOverlay myLocationOverlay;

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

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

    @Override
    public void onCreate(Bundle x){
        ...
        setupMyLocation();
        ...
    }

    protected void setupMyLocation(){
        myLocationOverlay = new MyLocationOverlay(this, mapView);
        myLocationOverlay.enableMyLocation();
        myLocationOverlay.runOnFirstFix(new Runnable() {
            public void run() {
                mapView.getOverlays().add(myLocationOverlay);
            }
        });
    }
}