如何获取onCreate()的新线程信息并保持线程安全?

时间:2016-07-27 02:40:30

标签: android thread-safety

专家,

我在一个活动中的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);
}

}

1 个答案:

答案 0 :(得分:0)

我不得不说,我个人认为我的问题是典型而有用的做法,但没有答案。

我也相信我的问题很清楚。

过了几天'研究,我发现Callable接口应该是正确的答案,我可以定义一个布尔返回值来代表网络状态,同时get()方法保证线程安全。

但是,我搜索整个google和android API,找不到Android的Callable示例。

真的不明白为什么这个问题冷淡对待......