我正在制作 Android 4.4 项目。我有NetworkOnMainThreadException
。下面是我的过程。
Service(sticky) -> Handler(per 5 minutes) -> Runnable -> HttpPost
Runnable 不是一个单独的线程吗?我应该在 Runnable 中使用 AsyncTask 吗?
我正在制作 Android 4.4 项目。我有NetworkOnMainThreadException
。下面是我的过程。
Service(sticky) -> Handler(per 5 minutes) -> Runnable -> HttpPost
Runnable 不是一个单独的线程吗?我应该在 Runnable 中使用 AsyncTask 吗?
Runnable 是一个简单的接口,根据 Java 文档,“应该由其实例打算由线程执行的任何类实现”。(强调我的。)
例如,如下定义 Runnable 将简单地在创建它的线程中执行它:
new Runnable() {
@Override
public void run() {
Log.d("Runnable", "Hello, world!");
}
}.run();
请注意,您实际上在这里所做的只是创建一个类并执行其公共方法run()
。这里没有什么魔法可以让它在一个单独的线程中运行。当然没有;Runnable 只是三行代码的一个接口!
将此与实现 Thread(实现 Runnable)进行比较:
new Thread() {
@Override
public void run() {
Log.d("Runnable", "Hello, world!");
}
}.start();
这里的主要区别在于 Thread 的start()
方法负责生成新线程并run()
在其中执行 Runnable 的逻辑。
Android 的 AsyncTask 进一步促进了线程执行和回调到主线程,但概念是相同的。
Runnable
只是本身不是一个Thread
. 您可以使用 aRunnable
在 a 中运行Thread
,但这些是不同的概念。您可以使用 anAsyncTask
或仅定义 aThread
并使用.start()
它。