我正在制作Android 4.4项目。我有NetworkOnMainThreadException
。
以下是我的流程。
Service(sticky) -> Handler(per 5 minutes) -> Runnable -> HttpPost
不能运行一个单独的线程吗?我在Runnable中使用AsyncTask吗?
答案 0 :(得分:11)
Runnable是一个简单的接口,as per the Java documentation," 应由其实例打算由线程执行的任何类实现 &#34。 (强调我的。)
例如,按如下方式定义Runnable只需在创建它的同一个线程中执行它:
new Runnable() {
@Override
public void run() {
Log.d("Runnable", "Hello, world!");
}
}.run();
观察您在此处所做的一切就是创建一个类并执行其公共方法run()
。这里没有任何魔力使它在一个单独的线程中运行。当然没有; Runnable只是一个interface of three lines of code!
将此与实现Thread(实现Runnable)进行比较:
new Thread() {
@Override
public void run() {
Log.d("Runnable", "Hello, world!");
}
}.start();
这里的主要区别在于Thread的start()
方法负责生成新线程并在其中执行Runnable run()
的逻辑。
Android的AsyncTask进一步促进了线程执行和回调到主线程,但概念是相同的。
答案 1 :(得分:3)
Runnable
本身就是不一个Thread
。您可以使用Runnable
在Thread
内运行,但这些是不同的概念。您可以使用AsyncTask
或仅定义Thread
并使用.start()
。