Java 处理程序在主线程上发布Runnable时生成的排队工作循环器线程
我试图理解Android中的线程。 这就是我的代码-Java 处理程序在主线程上发布Runnable时生成的排队工作循环器线程,java,android,multithreading,Java,Android,Multithreading,我试图理解Android中的线程。 这就是我的代码- private Handler mHandler = new Handler(); private Runnable mPeriodicUpdate = new Runnable() { @Override public void run() { android.os.Process.setThreadPriority(THREAD_MAX_PRIORITY); mHandler.
private Handler mHandler = new Handler();
private Runnable mPeriodicUpdate = new Runnable() {
@Override
public void run() {
android.os.Process.setThreadPriority(THREAD_MAX_PRIORITY);
mHandler.postDelayed(mPeriodicUpdate, 10*1000 - SystemClock.elapsedRealtime()%1000);
mIsStarted = true;
Toast.makeText(
getApplicationContext(),
"Lat: " + mLatitude + "\nLng: " + mLongitude,
Toast.LENGTH_LONG
).show();
Log.d(TAG, "run: Getting Location Information");
}
};
当我调用mHandler.post(mPeriodicUpdate)时代码>弹出一个新线程(参见图)
我想知道这条线是关于什么的?如果我挂起这条线,祝酒词就会不断出现。当我挂起主线程时,祝酒会停止并记录消息。显然,这是在主线程上运行的,那么这个新线程是干什么的?我在运行代码时没有看到这个线程据我所知,handler.post(Runnable)
这将Runnable作为消息添加到消息队列中,并且Runnable将在主线程上执行。因此handler.post
不会在QueuedWorker.java#getHandler()
中创建新线程,它有HandlerThread HandlerThread=new HandlerThread(“排队工作循环器”,Process.THREAD\u PRIORITY\u前台);handlerThread.start()代码>所以线程可能是从这里创建的。文档上说:`*这是为了异步写入SharedReference编辑而创建的,这样我们就有了一种机制*来等待Activity.onPause和类似位置的写入操作,但我们将来可能会将此机制用于*其他事情。`您的代码中是否有SharedReference操作?@LiuWenbin_否。哦,是的,我正在使用SharedReference。但这在不同的课堂上使用。我再次尝试注释掉SharedReference操作,尽管它在其他类中。还是那根线冒出来了。但你给了我一点洞察力。我想补充一点,这段代码在服务中。我在运行代码时没有看到这个线程。据我所知,handler.post(Runnable)
这将Runnable作为消息添加到消息队列中,并且Runnable将在主线程上执行。因此handler.post
不会在QueuedWorker.java#getHandler()
中创建新线程,它有HandlerThread HandlerThread=new HandlerThread(“排队工作循环器”,Process.THREAD\u PRIORITY\u前台);handlerThread.start()代码>所以线程可能是从这里创建的。文档上说:`*这是为了异步写入SharedReference编辑而创建的,这样我们就有了一种机制*来等待Activity.onPause和类似位置的写入操作,但我们将来可能会将此机制用于*其他事情。`您的代码中是否有SharedReference操作?@LiuWenbin_否。哦,是的,我正在使用SharedReference。但这在不同的课堂上使用。我再次尝试注释掉SharedReference操作,尽管它在其他类中。还是那根线冒出来了。但你给了我一点洞察力。我想补充一点,这段代码在一个服务中。