Runnable上的NetworkOnMainThreadException

时间:2014-03-22 16:32:42

标签: android runnable networkonmainthread

我正在制作Android 4.4项目。我有NetworkOnMainThreadException。 以下是我的流程。

Service(sticky) -> Handler(per 5 minutes) -> Runnable -> HttpPost

不能运行一个单独的线程吗?我在Runnable中使用AsyncTask吗?

2 个答案:

答案 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。您可以使用RunnableThread内运行,但这些是不同的概念。您可以使用AsyncTask或仅定义Thread并使用.start()