作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Activity ,必须每 500 毫秒捕获用户的 GPS 位置并将其写在屏幕上 (Textview tv2)。但出了点问题
它只捕获一次模拟器的 DDMS 发送的 GPS 位置,我在代码上打印了一些日志(方法 run()
)来检查线程,我看到打印内容仅在日志猫上写入一次。
最后一个日志打印也永远不会被调用......wtf。我的意思是这个打印: Log.w("PABLO", "despues Loop");
它永远不会被调用......就像线程在 Looper.loop 或其他东西之后停止一样。
这是代码:
public class AugmentedRealitySampleActivity extends Activity implements Runnable{
private TextView tv2;
//variables para obtener mi posicion:
LocationManager mLocationManager;
Location mLocation;
MyLocationListener mLocationListener;
Location currentLocation = null;
double lat=-1;
double lon=-1;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
FrameLayout rl = new FrameLayout(this.getApplicationContext());
LinearLayout ll= new LinearLayout(this.getApplicationContext());
ll.setOrientation(LinearLayout.VERTICAL);
setContentView(rl);
rl.addView(ll);
tv2=new TextView(getApplicationContext());
tv2.setBackgroundColor(Color.BLACK);
ll.addView(tv2);
tv2.setText("Test2");
Log.w("PABLO", "on create");
Thread thread = new Thread(this);
thread.start();
}
////////////////////////////////////////////////////////////////////////
//Métodos del Hilo que obtiene la posicion GPS del usuario periodicamente.
///////////////////////////////////////////////////////////////////////
public void run() {
mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
Log.w("PABLO", "principio hilo");
Looper.prepare();
mLocationListener = new MyLocationListener();
try{
Log.w("PABLO", "antes mLocationManager");
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, mLocationListener);
Log.w("PABLO", "despues mLocationManager");
}catch(Exception e){}
//try {
// wait(100);
//}catch (InterruptedException e) {}
Log.w("PABLO", "antes loop");
Looper.loop();
Log.w("PABLO", "despues loop");
}
}
private class MyLocationListener implements LocationListener
{
public void onLocationChanged(Location loc) {
if (loc != null) {
try{
currentLocation = loc;
handler.sendEmptyMessage(0);
}catch(Exception e){}
}
}
public void onProviderDisabled(String provider) { }
public void onProviderEnabled(String provider) { }
public void onStatusChanged(String provider, int status, Bundle extras) { }
}
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (currentLocation!=null)
{
lat=currentLocation.getLatitude();
lon=currentLocation.getLongitude();
if (lat==-1 && lon ==-1) /// si no existe ninguna posicion GPS anterior en el telefono, no hago nada
{
}
else //// si existe alguna posicion anterior (es decir, si el GPS del telefono ha sido activado al menos alguna vez en su vida util)
{
tv2.setText("Location= "+lat+" "+lon);
}
}
}
};
}
最佳答案
要么最后一个日志调用没有刷新,Looper.loop()没有结束,或者抛出运行时异常。我首先会在 Looper.loop() 周围的 Throwable 上添加一个 catch。由于这些事情对您来说也一定是显而易见的,因此我会寻找 (1) 简单的不可重入错误,(2) 泄漏资源,尤其是未关闭的文件、URL 连接。
关于java - 这个线程有什么问题?它只运行一次。 (带有 GPS 位置的线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7528762/
我是一名优秀的程序员,十分优秀!