我想在其他课程中执行网络操作。我在Runnable
中创建了MainActivity
,但我遇到了异常NetworkOnMainThreadException
我的问题是Runnable是不是从UI线程创建了另一个线程? 我是Android开发的新手。
MainActivity.java
//Inside MainActivity Class
//.....
Runnable initStack = new Runnable(){
@Override
public void run(){
otherClassObject.itsMethod();
handler.post(new Runnable(){
//back to UI thread....
});
}
}
答案 0 :(得分:2)
我的问题是Runnable是不是从UI线程创建了另一个线程?
没有。 Runnable
不是Thread
。如果您需要Thread
,请使用Thread
,或使用其他使用Thread
的内容(例如AsyncTask
)。
答案 1 :(得分:2)
您需要创建一个新的线程,而不仅仅是一个可运行的线程。不要致电initStack.run()
,而是执行以下操作:new Thread(initStack).start();
答案 2 :(得分:1)
可能重复:NetworkOnMainThreadException on Runnable
根据java文档,“应由任何其实例打算由线程执行的类实现。”
简而言之,Android对主线程上的网络相关线程的处理做了一些更改。它由AsyncTask完成。
在这里阅读: http://developer.android.com/reference/android/os/AsyncTask.html
此外,如果您在对实际编码部分进行信任跳跃之前先阅读Android编程和一些教程的基础知识,那会更好。
答案 3 :(得分:0)
将您的代码更改为。 Runnable不会创建线程。 Runnable是简单的三线接口。
new Thread() {
@Override
public void run() {
//your code here
}
}.start();