Android Java
public void onClick(View v) {
new HeavyWorkTask().execute();
}
private class HeavyWorkTask extends AsyncTask<Void, Void, Void> {
void onPreExecute() { doPreWorkInUIThread(); }
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
protected void doInBackground() { doHeavyWork(); }
/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
void onPostExecute() { doPostWorkInUIThread(); }
}
iOS Swift
@IBAction func onClick(sender: AnyObject) {
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
doPreWorkInUIThread()
dispatch_async(backgroundQueue, {
doHeavyWork()
dispatch_async(dispatch_get_main_queue(), 0), {
doPostWorkInUIThread()
})
})
}
C#
public async void onClick(object sender, EventArgs e) {
doPreWorkInUIThread();
await Task.Run({ () => doHeavyWork(); });
doPostWorkInUIThread();
}
まとめ
もっとも流れるように書けるのは、async/awaitパターンを有しているC#ちゃん!
Android JavaとかiOS Swiftはちょっち野暮ったいっすね^w^