fona procesi – iOS vs Android

Sanāca, ka vajadzēja vienu mazu projektiņu uztaisīt priekš Android un uzreiz pēc tam arī priekš iOS. Appam daži tāski bija jāveic backgroundā un tā kā laika periods starp abām platformām sanāca īsiņš, tad kaut kā prātā aizķērās cik ērti (then again es pamatā rakstu iOS) ir izmantot gcd iekš Obj-c un cik neērtāks šķiet Javas AsyncTask.

Izdomāju vienkārši paskatīties, kas ir mazākais optimālais (mazāks čakars :) ) koda daudzums uz abām platformāt; priekšnosacījums – kontrolēt darbības, kuras tiek veiktas background threadā, un kuras UI threadā. Tātad, kods ielādē attēlu no url un uzseto to uz ImageViewa.

iOS


    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    
        NSURL *url = [NSURL URLWithString: @"http://www.whatwatt.lv/images/logo_2x.png"];
        NSData *imageData = [NSData dataWithContentsOfURL: url];
        UIImage *image = [UIImage imageWithData: imageData];
        
        dispatch_async(dispatch_get_main_queue(), ^{
        
            imageView.image = image;
            
        });
    
    });

Android:

    new ImageDownloader().execute("http://www.whatwatt.lv/images/logo_2x.png");

    private class ImageDownloader extends AsyncTask<String, Void, Bitmap>
    {
        @Override
        protected Bitmap doInBackground(String... params) {

            Bitmap pic = null;
            try {
                String urlString = params[0];
                URL url = new URL(urlString);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                pic = BitmapFactory.decodeStream(input);
            } catch (Exception ex) {}

            return pic;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            if (result != null) {
                imageView.setImageBitmap(result);
            }
        }
    }

Varbūt, ka teorijā varētu Andorid izmantot arī Thread + Runnable, bet jāpiekrīt https://www.youtube.com/watch?v=wSpd0JYau1Y, ka tur var sakrāties ntie exceptioni.. so imo bg procesu vadības ziņā – 1:0 iOS labā :)

btw
Ja kāds varētu parādītu, ka šo lieto novienkāršot uz Android – wellcome !

Atbildēt

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti kā *

Jūs varat izmantot šādas HTML birkas un atribūtus: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>