专家,
我在一个活动中的onCrate()中有一个非常长的代码。在长代码的开头,我需要判断网是否坏,如果是,则返回并跳过剩余的代码。
我理解我无法判断UI线程中的网络,所以我需要使用AsyncTask或Handler& Runnable。
但我学到的所有教程都是在新线程中获取net bad或ok状态并传递给onPostExecute(AsyncTask)或handleMessage(Handler),然后更新UI或在onPostExecute(AsyncTask)或handleMessage(Handler)中执行某些操作,因为他们在UI线程中。
上面不是我需要的,我需要的是将net bad或ok信息带到onCreate()方法,所以我可以知道是否应该继续运行onCreate()中的剩余代码。
(注意在onCreate()从新线程获取网络信息(需要时间)之前,需要避免执行剩余的代码)
但我不知道该怎么办?你能帮帮忙吗?提前谢谢。
(另外如果我需要将onCreate()内的param传递给新的Runnable,该怎么办?)
我的代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if net is bad then return;
// more than 1 thousand other codes...
}
}
处理程序示例:
public class MainActivity extends Activity {
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.num) {
case 1: show net is ok in a UI textview
case 2: show net is bad
(but how to pass the msg.num to inside onCreate()?)
}
}
};
Runnable newTread = new Runnable() {
@Override
public void run() {
// judge net statements
msg.obj = num;
handler.sendMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
答案 0 :(得分:0)
我不得不说,我个人认为我的问题是典型而有用的做法,但没有答案。
我也相信我的问题很清楚。
过了几天'研究,我发现Callable接口应该是正确的答案,我可以定义一个布尔返回值来代表网络状态,同时get()方法保证线程安全。
但是,我搜索整个google和android API,找不到Android的Callable示例。
真的不明白为什么这个问题冷淡对待......