LoginSignup
32
35

More than 5 years have passed since last update.

非同期処理の書き方を Java と Swift と Xamarin で比較する

Last updated at Posted at 2016-07-19
1 / 6

「重たい処理を非同期で実行して、結果をメインスレッドで画面に表示」を、

  • Android-Java
  • iOS-Swift
  • Xamarin(Android も iOS も同じ)

で比較。


Android

@Override
public void onClick(View view) {
    new AsyncTask<Void, Void, Long>() {
        @Override
        protected Long doInBackground(Void[] p) {
            // ワーカースレッド
            long ret = 0;
            for (long i = 0; i < 1000000000; i++)
                ret += i;
            return ret;
        }

        @Override
        protected void onPostExecute(Long result) {
            // UIスレッド
            text1.setText(String.valueOf(result));
        }
    }.execute((Void)null);
}

Swift

@IBAction func onTouchUpInside(sender: AnyObject) {
    weak var weakSelf = self
    dispatch_async(dispatch_get_global_queue(
        DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
        // ワーカースレッド
        var ret:Int = 0
        for i in 0...1000000000 {
            ret += i
        }

        dispatch_async(dispatch_get_main_queue(), {
            // UIスレッド
            weakSelf?.label1.text = String(ret)
        });
    });
}

Xamarin(Android も iOS も)

Task<long> FatProc() => Task.Run<long>(() => {
    long ret = 0;
    for (long i = 0; i < 1000000000; i++)
        ret += i;
    return ret;
});

button1.TouchUpInside += async (_, e) => {
    var ret = await FatProc(); // ワーカースレッド
    label1.Text = ret.ToString(); // UIスレッド
};

Xamarin はいいぞ!

32
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
35