ton*_*099 2 android ui-thread android-handler
在我的Activity中我使用了一个处理程序
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//do GUI stuff, edit views, etc..
}
};
Run Code Online (Sandbox Code Playgroud)
我也有一个Runnable,发布到PHP并等待json响应
Runnable runnable3 = new Runnable() {
public void run() {
JSONParserArray jsonParserRun = new JSONParserArray();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("p1", "myParam1"));
try {
String link = "http://mylink.com/someFileOnServer.php";
JSONArray jArray = jsonParserRun.makeHttpRequest(link , "POST",
params);
if (jArray != null && jArray.length() != 0) {
} else {
//either null (because of throwing exception) or empty
}
} catch (Exception e) {
}
}
handler.sendEmptyMessage(0);
handler.postDelayed(runnable, 30000);
}
Run Code Online (Sandbox Code Playgroud)
我每30秒重复一次任务,最后在我的onCreate()里面创建一个线程然后传递给它 Runnable
@Override
public void onCreate(Bundle savedInstanceState) {
//other stuff
Thread t = new Thread(runnable3);
t.start();
}
Run Code Online (Sandbox Code Playgroud)
这段代码android.os.NetworkOnMainThreadException甚至认为我正在开始一个新的线程并传递Runnable给它.JSONParserArray类在其他情况下工作正常(所以不用担心)
但是,当我在里面运行这个方法时Runnable,它运行正常.
private boolean hasActiveInternetConnection() {
try {
new Socket().connect(new InetSocketAddress("google.com", 80), 3000);
return true;
} catch (Exception e) {
Log.i("tag", e.toString());
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
Handler.postDelayed()执行Runnable在Thread其中Handler创建.在您的情况下,您可以在UI线程上的Activity中创建它.所以第一次,Runnable获取在一个单独的Thread中执行,但第二次在UI Thread中执行.
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |