Android рдореЗрдВ AsyncTask рдФрд░ ProgressDialog рдХрд╛ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧ

рдЫрд╡рд┐

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рджрд╛рдпреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рднрд╛рд░реА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдЙрдирдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ AsyncTask рдФрд░ ProgressDialog рдХрд╛ рдЙрдкрдпреЛрдЧред

рдпрд╣ рдпреБрдЧрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЗрд╕ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдорд╛рддреНрд░рд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЕрд╕рд╣рдиреАрдп рджрд░реНрдж рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рджрд░реНрдж рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд╕реНрдХреНрд░реАрди рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

AsyncTask

рдЬреЛ рд▓реЛрдЧ AsyncTask рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
рдФрд░ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░

рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдХреБрдЫ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреНрд░реЛрдЧреНрд░реЗрд╕рдбрд╛рдпрд▓реЙрдЧ рдХрд╛рд░реНрдп рдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╢реИрддрд╛рди рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рд╕реНрдХреНрд░реАрди рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╡рд╛рдж рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рд▓рдВрдмреЗ, рд▓реЗрдХрд┐рди рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реИ: рд╕реНрдХреНрд░реАрди рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрджрд▓рдирд╛ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рддрдВрддреНрд░ рдХреЛ android:configChanges="orientation" рд╕реЗрдЯ рдХрд░рдХреЗ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ android:configChanges="orientation" рдЯреИрдЧ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдиреБрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдЧрд╛ред

рд╕рдорд╛рдзрд╛рди рдЧрддрд┐рд╡рд┐рдзрд┐-AsyncTask-ProgressDialog рдмрдВрдбрд▓ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ AsyncTaskManager рдХрд╣рддреЗ рд╣реИрдВред

рдЧрддрд┐рд╡рд┐рдзрд┐

рдЗрд╕рд▓рд┐рдП, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдХреЗрд╡рд▓ рдкрд╛рдВрдЪ рдЪреАрдЬреЗрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХреЛрдб):
рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдФрд░ AsyncTaskManager рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

     public interface OnTaskCompleteListener {        void onTaskComplete(Task task);    } 

рд╡рд┐рдзрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рдЬрд┐рд╕ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдЙрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

AsyncTaskManager

AsyncTaskManager рдХреЛ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЙрдмрд▓рддреЗ рд╣реИрдВ:
рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрд┐рд╕реЗ рдХрд╛рд░реНрдп рдкрд░ рд▓рд╛рдЧреВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

     public interface IProgressTracker {        void onProgress(String message);        void onComplete();    } 

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

     @Override    public void onProgress(String message) {        if (!mProgressDialog.isShowing()) {            mProgressDialog.show();        }        mProgressDialog.setMessage(message);    }    @Override    public void onComplete() {        mProgressDialog.dismiss();        mAsyncTask.setProgressTracker(null);        mTaskCompleteListener.onTaskComplete(mAsyncTask);        mAsyncTask = null;    } 

рдХрд╛рд░реНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛:

     mAsyncTask.setProgressTracker(this); 

рдХрд╛рд░реНрдп рд╕реЗ рдЕрд▓рдЧ рдХрд░реЗрдВ:

     mAsyncTask.setProgressTracker(null);    mAsyncTask = null; 

рд╕рдВрд╡рд╛рдж рд░рджреНрдж рдХрд░реЗрдВ:

     @Override    public void onCancel(DialogInterface dialog) {        mAsyncTask.setProgressTracker(null);        mAsyncTask.cancel(true);        mTaskCompleteListener.onTaskComplete(mAsyncTask);        mAsyncTask = null;    } 

AsyncTaskManager рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдХрд╛рд░реНрдп рдХреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдкреБрдирдГ рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рдкреНрд░реЛрдЧреНрд░реЗрд╕рдбрд╛рдпрд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЫреБрдкрд╛рддрд╛ рд╣реИред

AsyncTask


рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрд╕реЗ AsyncTaskManager рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ / рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА:

     public void setProgressTracker(IProgressTracker progressTracker) {        mProgressTracker = progressTracker;        if (mProgressTracker != null) {            mProgressTracker.onProgress(mProgressMessage);            if (mResult != null) {                mProgressTracker.onComplete();            }        }    } 

рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрд╛рд░реНрдп рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░рдЧрддрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рдФрд░, рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдЯреНрд░реИрдХрд░ рд╡рд┐рдзрд┐ (AsyncTaskManager) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рднрд▓реЗ рд╣реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдП, рдпрд╣ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред

рдкрд░рд┐рдгрд╛рдо

рдЕрдм рдЖрдк рдирд┐рдбрд░ рд╣реЛрдХрд░ рдлреЛрди рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдРрд╕реЗ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣рд╛рд▓рд┐рдпрд╛ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн

рдбреНрд░рд╛рдлреНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рд▓реЗрдЦ
AsyncTask (рдПрди) рдХрд╛ рд╡рд┐рд╡рд░рдг
рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдХрд╛рд░реНрдп (рдПрди)
Android рдореЗрдВ рд╕рдВрд╡рд╛рдж (en)

Source: https://habr.com/ru/post/In114570/


All Articles