рдкреНрд░рдЧрддрд┐ рд╕рдВрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдкреНрд░рдЧрддрд┐ рд╕рдВрд╡рд╛рдж рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдореЗрд░рд╛ рдиреЛрдЯ рдЙрдирдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред



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



.runOnUiThread(new Runnable() { @Override public void run() { //    } });
      
      







рдпрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП:



 .post(new Runnable() { @Override public void run() { //    } });
      
      







рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдЖрджреЗрд╢ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВред рдПрдХ рдлрд╛рдпрджрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЬрдм рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреНрд░реЗрдХ рд▓рдЧрд╛рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╕рднреА рд░рд┐рдбрд░рд┐рдВрдЧреНрд╕ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ, рдЧрдгрдирд╛ / рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлреНрд░реАрдЬ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИред



рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдВрд╡рд╛рдж рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕реАрдзреЗ рд╕рдВрд╡рд╛рдж рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░ рд╣реИ:



1. рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдПрдХ рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рдЗрдВрдЯ DIALOG_KEY = 1 ред

2. рд╕рдВрд╡рд╛рдж рдмрдирд╛рдПрдБ рдФрд░ рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рд╡рд┐рдзрд┐ onCreateDialog (int id) рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред

3. рд╕реНрдХреНрд░реАрди рдкрд░ рдбрд╛рдпрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ showDialog (DIALOG_KEY) рдХреЛ рдЙрд╕рдХреЗ рдирдВрдмрд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред

4. рд╡рд╣ рдбрд╛рдпрд▓реЙрдЧ рдбрд┐рд▓реАрдЯ рдХрд░реЗрдВ рдЬреЛ рдмрд░реНрдЦрд╛рд╕реНрддрдЧреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ (DIALOG_KEY) ред



рд╡рд┐рдХрд▓реНрдк 1. рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕рдВрд╡рд╛рдж рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрд╡рд╛рдж рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред





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



 public class AlphabetView extends Activity { private static final int DIALOG_LOAD_KEY = 1; private Activity context; private Alphabet alphabet; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alphabet); context = this; alphabet = Main.getAlphabet(); ListView lv = (ListView) findViewById(R.id.ListViewMain); lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item, alphabet.getNames())); //       lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final int i = position; showDialog(DIALOG_LOAD_KEY); //   //        new Thread(new Runnable() { public void run() { Main.loadData(i); //     handler.sendEmptyMessage(0); //      } }).start(); } }); } //           Activity private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { dismissDialog(DIALOG_LOAD_KEY); //   Intent intent = new Intent(context, AuthorsView.class); startActivity(intent); } }; @Override //      protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_LOAD_KEY: { ProgressDialog dialog = new ProgressDialog(this); dialog.setMessage(",  ..."); dialog.setCancelable(true); return dialog; } } return super.onCreateDialog(id); } }
      
      







рд╡рд┐рдХрд▓реНрдк 2. рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕рдВрд╡рд╛рдж рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдВрд╡рд╛рдж рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред





рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рд╣рдо рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕рдВрд╡рд╛рдж рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж, рд╣рдо рдКрдкрд░ рд╡рд░реНрдгрд┐рдд runOnUiThread рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред



 public class AlphabetView extends Activity { private static final int DIALOG_LOAD_KEY = 1; private Activity context; private Alphabet alphabet; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alphabet); context = this; alphabet = Main.getAlphabet(); ListView lv = (ListView) findViewById(R.id.ListViewMain); lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item, alphabet.getNames())); //       lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final int i = position; showDialog(DIALOG_LOAD_KEY); //   } }); } @Override //      protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_LOAD_KEY: { final ProgressDialog dialog = new ProgressDialog(this); dialog.setMessage(",  ..."); dialog.setCancelable(true); new Thread(new Runnable() { @Override public void run() { Main.loadData(); //     //     runOnUiThread(new Runnable() { @Override public void run() { dismissDialog(DIALOG_LOAD_DATA); } }); } }).start(); return progressDialog; } } return super.onCreateDialog(id); } }
      
      







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



  Main.loadData(); //     //     runOnUiThread(new Runnable() { @Override public void run() { dismissDialog(DIALOG_LOAD_DATA); } });
      
      







рд╡рд┐рдХрд▓реНрдк 3. AsyncTask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕рдВрд╡рд╛рдж рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ред





рдпрд╣ рдХрднреА-рдХрднреА рдПрд╕рд┐рдВрдХреНрд╕рдЯрд╕реНрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред developer.android.com/resources/articles/pless-threading.html ред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:



 public void onClick(View v) { new DownloadImageTask().execute("http://example.com/image.png"); }
      
      







DownloadImageTask, AsyncTask рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдВрд╡рд╛рдж рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрджрд╛рд╣рд░рдг 1 рдореЗрдВ рджрд┐рдП рдЧрдП onCreateDialog рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



 private class DownloadImageTask extends AsyncTask<string, void,="" bitmap=""> { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); //    } protected void onPreExecute() { showDialog(DIALOG_LOAD_KEY); //   } protected void onProgressUpdate() { //       . } protected void onPostExecute(Bitmap result) { dismissDialog(DIALOG_LOAD_DATA); //   } }
      
      







рдпрджрд┐ рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред



All Articles