App下載
話題 首頁(yè) > iOS 開(kāi)發(fā)手冊(cè) > iOS 開(kāi)發(fā)手冊(cè)話題列表 > 詳情

異步編程線性化操作

精華
smartwolf111 2016-10-21 02:20:34 瀏覽(3078) 回復(fù)(4) 贊(0)
有這么一個(gè)場(chǎng)景
一個(gè)需要多個(gè)步驟的且占用大量時(shí)間的I/O操作在App初始化的時(shí)候進(jìn)行。
想請(qǐng)問(wèn)大家,這個(gè)怎么操作,是用事件驅(qū)動(dòng)(如Android中的Handler,iOS中的NotificationCenter),還是直接使用回調(diào)函數(shù)好。
因?yàn)檫@個(gè)操作有很多步驟,第一步做好后,開(kāi)始第二步,第二步完成后,開(kāi)始第三步,以此類推。因?yàn)槭荌/O操作,所以他們應(yīng)該都在異步線程里。
現(xiàn)在我所用的方式是在每一個(gè)步驟的回調(diào)中開(kāi)始下一步任務(wù),但是這么寫(xiě)感覺(jué)很怪異,大家都是怎么做的呢?
ios android

回答(4)

2016-10-21

這個(gè)其實(shí)Android封裝了Handler的一個(gè)異步類就很好啦。 AsyncTask,你可以直接在doInBackground里面去做這個(gè)一個(gè)個(gè)的步驟,一個(gè)步驟完成了可以publishProgress一下。http://developer.android.com/reference/android/os/AsyncTask.html

class MyTask extends AsyncTask {


    public void doInBackground(Void... params) {
        // step 1
        int resultCode = step1();
        if (resultCode == 0) {
            // 失敗
            cancel(true);
            return;
        }
        publishProgress(1);


        // ...
    }


    public void onCancelled() {
       // 某一步失敗了取消
    }


    public void onProgressUpdate(Integer... progress) {
       // 自定義的階段
    }
}
一筆荒蕪 2018-05-31

好慢呀,空空如也,半天不來(lái)大神解決,大佬在哪啦

1144100656 2018-05-31

大神在哪里呀,大神在哪里呀,大神在哪里呀.

1152696398 2018-05-31

這個(gè)問(wèn)題我也不清楚,等大佬來(lái)解決吧。。

要回復(fù),請(qǐng)先登錄 或者注冊(cè)