Android SplashScreen

Я разрабатываю приложение, которое в основном загружает много данных в начале самого приложения и отображает его в ListActivity. То, что я планирую сделать, показать Экран-заставку, пока данные не загружаются.

До настоящего времени все мои попытки были бесполезны. Я попробовал anddev.org, упомянул методы, но моя проблема состоит в том, что основной вид деятельности должен запуститься, но Экран-заставка должен быть видим, пока я не заполняю свой ListActivity. Так короче говоря я должен пройти следующие шаги:

  1. Запустите мой основной вид деятельности.
  2. Покажите экран-заставку.
  3. Продолжайте управлять процессом в фоне.
  4. Выйдите из Splashscreen при обработке завершенный и покажите основной Список.

Надежда Вы понимаете то, на что она похожа....

80
задан aligf 14 February 2012 в 00:39
поделиться

1 ответ

Скорее всего, проблема в том, что заставка (некая Dialog, как я предполагаю, ProgressDialog) запущена в том же потоке, что и вся выполняемая работа. Это не позволит обновить вид заставки, что может помешать даже ее отображению на экране. Нужно отобразить заставку, запустить экземпляр AsyncTask, чтобы пойти загрузить все данные, затем скрыть заставку после выполнения задания.

Таким образом, ваш метод Activity's onCreate() просто создаст ProgressDialog и покажет его. Затем создайте AsyncTask и запустите его. Я бы сделал AsyncTask внутренним классом вашей основной Activity, чтобы он мог хранить данные, загруженные в какую-нибудь переменную в вашей Activity, и закрыть ProgressDialog в своем методе onPostExecute().

Не уверен, что теперь можно разрабатывать, не показывая код, так что вот:

public class MyActivity extends Activity {
    private ProgressDialog pd = null;
    private Object data = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Show the ProgressDialog on this thread
        this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);

        // Start a new thread that will download all the data
        new DownloadTask().execute("Any parameters my download task needs here");
    }

    private class DownloadTask extends AsyncTask<String, Void, Object> {
         protected Object doInBackground(String... args) {
             Log.i("MyApp", "Background thread starting");

             // This is where you would do all the work of downloading your data

             return "replace this with your data object";
         }

         protected void onPostExecute(Object result) {
             // Pass the result data back to the main activity
             MyActivity.this.data = result;

             if (MyActivity.this.pd != null) {
                 MyActivity.this.pd.dismiss();
             }
         }
    }    
}

Очевидно, что там есть несколько кусочков, которые нужно заполнить, но этот код должен запуститься и дать вам хорошую отправную точку (простите, если произошла ошибка в коде, у меня нет доступа к Android SDK, так как я набираю его в данный момент).

Еще несколько хороших статей на тему AsyncTasks в Android можно найти здесь и здесь .

.
89
ответ дан 24 November 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: