我知道存在这样的问题,但我在这里很困惑.我正在使用此代码:
public class NewWaitAppActivity extends Activity { private Handler mHandler; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); mHandler = new Handler(); lcmgr = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); Thread LocThread = new Thread(mLocationUpdater); Log.d("TAG","About to start worker thread"); LocThread.start();}public voID startTimer(VIEw v) { if (mStartTime == 0L) { mStartTime = System.currentTimeMillis(); mHandler.removeCallbacks(mUpdateTiMetask); mHandler.postDelayed(mUpdateTiMetask, 100); } }private Runnable mUpdateTiMetask = new Runnable() { public voID run() { final long start = mStartTime; long millis = System.currentTimeMillis() - start; int seconds = (int) (millis / 1000); int minutes = seconds / 60; seconds = seconds % 60; TextVIEw timer = (TextVIEw) findVIEwByID(R.ID.time_elapsed); if (seconds < 10) { timer.setText("" + minutes + ":0" + seconds); } else { timer.setText("" + minutes + ":" + seconds); } mHandler.postDelayed(this, 1000); } };LocationListener locationListener = new LocationListener() { public voID onLocationChanged(Location location) { // Called when a new location is found by the network location provIDer. mStopTimer(); }};private Runnable mLocationUpdater = new Runnable(){ public voID run(){ Log.d("TAG","InsIDe worker thread"); lcmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); }};}
我基本上试图在位置更新时停止主线程的计时器.应用程序甚至没有启动,它在运行时给出了上面提到的错误.该错误是由requestLocationUpdates()引起的.好像我不能在onLocationChanged()中调用stopTimer().我怎么能纠正这个?
解决方法:
什么是从你创建的线程调用“lcmgr.requestLocationUpdates(….)”的需要,当它本身是一个基于异步回调的机制?只需在你的活动的onCreate()中移动这个代码,事情就可以了.当你尝试在线程中创建一个根本不打算循环的处理程序(即不调用Looper.prepare的线程,因为你的堆栈跟踪状态也是如此)时,会出现此错误.关于这个错误的更多解释也可以在这个网站上找到.但是这里也给出了一个很好的解释. http://www.aviyehuda.com/2010/12/android-multithreading-in-a-ui-environment/
总结以上是内存溢出为你收集整理的android – requestLocationUpdates给出错误“无法在未调用Looper.prepare()的线程内创建处理程序全部内容,希望文章能够帮你解决android – requestLocationUpdates给出错误“无法在未调用Looper.prepare()的线程内创建处理程序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)