【发布时间】:2013-09-17 17:46:36
【问题描述】:
我在主线程中有一个创建另一个线程的事件。这个新线程必须休眠 60 秒,然后它必须检查主线程状态。我的代码是这样的:
public class Act extends Activity {
Object lock=new Object();
public class MainT implements LocationListener {
public String str="";
public void onLocationChanged(Location location) {
synchronized(lock) {
str=String.valueOf(location.getLatitude())+" "+String.valueOf(location.getLongitude());
new SecondT(str).start();
}
}
class SecondT extends Thread {
public String st;
SecondT(String s) {
st=s;
}
public void run() {
waitSeconds();
}
public void waitSeconds() {
try {
Thread.sleep(60000);
synchronized(lock) {
if (str.equals(st))
Log.d("SecondT", "Same string.");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
MainT mt = new MainT();
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 50, mt);
}
}
问题在于,如果启动该线程,则 MainT 会休眠(即使我通过调试工具传递新坐标,也不会调用 GPS 事件)。
【问题讨论】:
-
您能否发布一个完整的可运行程序来重现该问题?
-
我添加了整个班级。
-
你能编辑你的问题来解释更多你得到的行为吗?主线程是在分叉另一个线程然后它就休眠了吗?
-
你可以使用日志条目来追踪 main 花费时间的地方吗?
标签: java android multithreading events sleep