我正在尝试在Android中构建Google地图集成。我的应用只是在地图中显示当前位置。我能够从GPS获得正确的纬度和经度值,并且使用覆盖类将其指向地图上最近的位置。我正在尝试将GPS纬度和经度值转换为其地名,这是在单独的处理程序线程中完成的。当我的应用程序运行后,某个时候Android设备将进入屏幕锁定模式。解锁屏幕后,我看到我的当前mapActivity在一段时间内没有响应,系统生成Android ANR消息“强制关闭”此活动。是不是因为我的处理程序Thread没有响应主系统ui线程?或者有任何其他问题吗? 处理程序线程的代码片段如下所示......
private void ConvertPointToLocation(GeoPoint point) {
final GeoPoint p= point;
Thread thrd = new Thread()
{
public void run(){
Geocoder geoCoder = new Geocoder(
getBaseContext(), Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(
p.getLatitudeE6() / 1E6,
p.getLongitudeE6() / 1E6, 1);
if (addresses.size() > 0) {
for (int indexValues = 0;
index < addresses.get(0).getMaxAddressLineIndex(); indexValues++)
address += addresses.get(0).getAddressLine(indexValues) + " ";
}
uiCallback.sendEmptyMessage(0);
}
catch (IOException e) {
e.printStackTrace();
}
}
};
thrd.start();
}
private Handler uiCallback=new Handler(){
@Override
public void handleMessage(Message msg)
{
//TextView locationNameDisplay value is set by address String variable...
locationNameDisplay.setText(address);
address="";
}
};
我需要知道为什么当我的活动进入后台时,Android Not Responding对话框会出现。
我欢迎你的帮助和建议,因为我是这个领域的新手,我正在学习新的东西?
答案 0 :(得分:-1)
您可能需要为此类任务创建Service
,因为使用Services
和Threads
之间存在差异。当你有一个相对较长的运行操作,比如下载一些东西时,你应该使用一个单独的Thread
。此时启动此线程的活动必须位于前台。当您需要执行一些非常长时间运行的操作时,您应该使用Service
让用户关闭您的应用程序并执行其他操作,而服务仍在后台运行。希望这会有所帮助。