【发布时间】:2019-03-21 08:22:08
【问题描述】:
在 Android 中,当我在服务中创建一个可运行对象并运行它时,虽然我意识到它在自己的线程中运行,但这个线程在某种程度上是 UI 线程的一部分吗?也就是说,如果runnable执行了很长的进程,会不会影响UI?
编辑:
private class SomeRunnable implements Runnable
{
@Override
public void run()
{
try
{
}
}
}
SomeRunnable runnable = new SomeRunnable();
(new Handler()).postDelayed(runnable, 1000);
【问题讨论】:
-
取决于你如何运行它。
-
您的假设“......虽然我意识到它在自己的线程中运行......”是不正确的。
Runnable可以在任何地方运行,这取决于你在哪里运行它。例如,如果您只是在您的Service中创建一个Handler,然后使用Handler发布您的Runnable,它将在主(UI)线程上运行。 -
感谢您的编辑。使用此代码,您的
Runnable正在主 (UI) 线程上运行。如果此Runnable需要很长时间,您将面临应用程序因 ANR(应用程序无响应)错误而被强制关闭的风险。 -
在 AsyncTask 中运行它会更好还是我仍然会遇到同样的问题?
-
如果您只想在单独的线程中运行
Runnable,则不需要AsyncTask。就这样做:new Thread(new SomeRunnable()).start();