我不确定我的服务是否在自己的线程上运行。
我在我的服务中使用onCreate方法执行此操作:
@Override
public void onCreate() {
HandlerThread thread = new HandlerThread("ServiceStartArguments");
thread.start();
}
我可以看到调试时创建的线程,但我仍然不确定,因为我看到人们会这样做:
handler=new Handler();
Runnable r=new Runnable()
{
public void run()
{
tv.append("Hello World");
}
};
handler.postDelayed(r, 1000);
怎么样,为什么?请解释一下,我不明白!
这让我感到困惑..
I/Choreographer﹕ Skipped 52 frames! The application may be doing too much work on its main thread.
答案 0 :(得分:2)
在HandlerThread的run()方法中执行的任何操作都在您使用onCreate()中的thread.start()开始的线程上运行。默认情况下,服务中的任何其他内容都在UI线程上运行(除非您使用的是IntentService,否则onHandleIntent()会自动在非UI线程中运行。)
您发布的模式可能演示了如何从不同的线程更新UI线程上的UI。
答案 1 :(得分:1)
使用此选项检查主题的ID:
long myThreadId = Thread.currentThread().getId();
Log.d("thread debuging", "Thread id is: " + myThreadId);
或者您也可以使用这些来设置线程的名称:
Thread.currentThread().setName("A_NAME_FOR_THIS_THREAD");
String threadName = Thread.currentThread().getName();