Programlama konusunda çok yeniyim ve bazı şüphelerim var.
RunInBackGroundolarak adlandırdığım bir
AsyncTask` var.
ve bu sürece şöyle başlıyorum:
new RunInBackGround().execute();
Ancak diğer kod ifadelerine geçmeden önce bu çağrının yürütülmesinin bitmesini beklemek istiyorum.
Bunu nasıl yapabilirim?
Bunun için herhangi bir yol var mı?
bu çağrının yürütülmesi bitene kadar bekleyin
Sonucu geri almak için AsyncTask.get() yöntemini çağırmanız ve doInBackground
yürütmesi tamamlanmayana kadar beklemeniz gerekecektir. ancak bir İş Parçacığı içinde get yöntemini çağırmazsanız bu Ana UI iş parçacığını donduracaktır.
Sonucu UI İş Parçacığında geri almak için AsyncTask
olarak başlatın:
String str_result= new RunInBackGround().execute().get();
Kodunuzun paralel çalışabilmesi en iyisi olsa da, uygulamanızın kullanım akışı onu beklemek zorunda kalsa bile UI iş parçacığını engellememek için sadece bir iş parçacığı kullanmanız gerekebilir.
Burada hemen hemen iki seçeneğiniz var;
Beklemesini istediğiniz kodu AsyncTask'ın içinde çalıştırabilirsiniz. Eğer kullanıcı arayüzünü (thread) güncellemekle ilgiliyse, onPostExecute yöntemini kullanabilirsiniz. Arka plandaki işiniz bittiğinde bu otomatik olarak çağrılır.
Herhangi bir nedenle bunu Activity/Fragment/Whatever'da yapmak zorunda kalırsanız, kendinize AsyncTask'ınızdan yayınladığınız özel bir dinleyici de oluşturabilirsiniz. Bunu kullanarak, Activity/Fragment/Whatever'ınızda yalnızca istediğiniz zaman çağrılan bir geri arama yöntemine sahip olabilirsiniz: yani AsyncTask'ınız beklemeniz gereken şeyle işi bittiğinde.
AsyncTask'ınıza aşağıdaki gibi bir ProgressDialog ekleyin:
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
onPreExecute()` metodundaMessage'ı şu şekilde ayarlayabilirsiniz:
this.dialog.setMessage("Processing...");
this.dialog.show();
ve onPostExecute(Void result)
metodunuzda ProgressDialog
unuzu kapatın.