Android SDK - запуск функций в фоновом режиме - PullRequest
3 голосов
/ 02 марта 2011

У меня есть функция, которая может варьироваться в зависимости от времени, необходимого для завершения. Я хотел бы отобразить диалоговое окно прогресса, пока эта функция работает.

Я знаю, что вы можете использовать «Нить» для достижения этой цели. Может ли кто-нибудь указать мне правильное направление для этого?

EDIT: Вот код, который я использую:

private class LongOperation extends AsyncTask<String, Void, String> 
{
    ProgressDialog dialog;
    public Context context;
    @Override
    protected String doInBackground(String... params) {
        if (!dialog.isShowing())
            dialog.show(); // Just in case
        return null;
    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
     */
    @Override
    protected void onPostExecute(String result) {
        dialog.dismiss();
    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onPreExecute()
     */
    @Override
    protected void onPreExecute() 
    {
        dialog = ProgressDialog.show(context, "Working", "Getting amenity information", true);
    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onProgressUpdate(Progress[])
     */
    @Override
    protected void onProgressUpdate(Void... values) {
      // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
     }
}

это класс Asnyc. Пользователь выбирает опцию из меню, и затем она выполняется:

longOperation.execute(""); // Start Async Task

GetAmenities(Trails.UserLocation); // Long function operation

Ответы [ 3 ]

6 голосов
/ 02 марта 2011

Вы должны использовать AsyncTask для этой цели.См. сайт разработчиков Android и Как использовать AsyncTask .

Пример кода:

private class LongRunningTask extends AsyncTask<Void, Boolean, Boolean> {

    private ProgressDialog progress;

    protected void onPreExecute() {
        progress = ProgressDialog.show(yourContext, "Title", "Text");
    }

    @Override
    protected Boolean doInBackground(Void... params) {
        return true;
    }

    protected void onPostExecute(Boolean result) {
        if(result) {
           progress.dismiss();
        }
    }

}
1 голос
/ 02 марта 2011

Посмотрите на эту страницу:

Ссылка индикатора выполнения

Привет

0 голосов
/ 02 марта 2011
public void onClick(View v) {
  new Thread(new Runnable() {
    public void run() {
      Bitmap b = loadImageFromNetwork();

    }
  }).start();
}

взято отсюда http://developer.android.com/resources/articles/painless-threading.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...