3 Ocak 2017 Yazarı yhackup 0

Android (Java) AsyncTask Kullanımı

Merhabalar,
AsyncTask işlemi bence önem arz eden bir konu, peki nedir nerelerde kullanırız bunu,

Uygulamalarımızda yapacağımız işlemler saniyeler sürer,
Örneğin Soap, Rest ve benzeri yöntemlerle sunucunuza bağlanıp veri alışverişi yapacaksınız. Verileri alıp sunucuya gitmeniz sunucunuzun bunu işleyip geriye sonuç verme süresi başlıca 3 kritere bağlı (Android cihazın hızı, Android cihazın internet hızı, Sunucunuzun veri işleme hızı) olarak uzar.

Bu bekleme sürecinde ekranda kullanıcıyı bekletmek ve  bu bekleme sırasında ekranın donması  kullanıcının istemeyeceği bir iş bu aynı bilgisayardaki bir programın “Yanıt Vermiyor” durumuna düşerek insanı çıldırtmasına benzer.

Bir Örnek daha yapalım, Uygulamanızda bir ImageView koyarak Sunucunuzdan bir fotoğrafı bu ImageView’e getireceksiniz Bunu ana işlemde yapıp Resim yüklenene kadar ekranı bekletmektense, arkaplanda yüklemek daha sağlıklı olacaktır.

Çok konuştuk koda geçelim örnek yapı açıklamalarıyla aşağıdaki gibidir.

//
//


    private class ArkaPlanİslemi extends AsyncTask<Object, Object, Void> {
        @Override
        protected void onPreExecute() {
             // Arka plandaki işlem başlamadan önce
             // Bu kod bloğu çalışacaktır
            super.onPreExecute();
        }
        @Override
        protected Void doInBackground(Object... arg0) {
             // Arka planda yapmamız gereken işlemlerimizi yapacağız.
             //
             // FAKAT..! Burada Görsel Componetler Kullanılamaz..
             // Örneğin Bir Textview'deki yazıyı bu alanda değiştiremezsiniz.
             // Bu konuya dikkat etmelisiniz.
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
             // doInBackground'da yaptığınız Arka plan işlemleri bittiğinde
             // Bu Kod bloğu çalışacaktır.
            super.onPostExecute(result);
        }
        @Override
        protected void onCancelled() {
             // Buranın adı üstünde :)
             // Yazmanız / Kullanmanız Şart değil.
            super.onCancelled();
        }
    }

Eğer doInBackground’da sunucunuzdan veya başka bir kaynaktan işlemeniz gereken bir veri alırsanız. ve doInBackground’da bu işlemi ekrana basmanız gerekir ise, bunu doInBackground’da değil onPostExecute kısmında yapmalısınız.
Bir tane de yukarıda hazır bahsetmişim bari bir de örnek yapayım,

Uygulamamızda Bir ImageView’imiz var, Kullanıcımız login olduğunda geri dönen resim url’sini alarak bu resmi Arkaplanda uygulamamız donmadan ImageView’imize yükleyelim.

 

//
//
// DownloadImage Başlatıyoruz.

  new DownloadImage((ImageView)header.findViewById(R.id.imageView))
    .execute("http://blog.yakupulutas.com/wp-content/uploads/2016/12/cropped-profile.png");

// DownloadImage Başlatıyoruz.



    private class DownloadImage extends AsyncTask<String, Void, Bitmap> {
        String ss;
        ImageView bmImage;
        public DownloadImage(ImageView bmImage) {
            this.bmImage = bmImage;
        }
        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                    ss = e.getMessage();
            }
            return mIcon11;
        }
        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }

Saygılarımla…