добавить счетчик прогресса в логическое значение приложения

В моем коде у меня есть логическое значение для установки информации в базу данных через предпочтение. Он работает нормально, но проблема в том, что теперь у меня есть много информации для добавления в приложение, и я получаю черный экран, пока информация добавляется в sqlite (только во время установки). Как я могу добавить индикатор выполнения, чтобы пользователи знали, что приложение находится в процессе установки. Я боюсь, что они подумают, что приложение сломано, когда будут смотреть на черный экран.

        /** Insert list into db once */
    if (pref.getBoolean("isFirst", true)) {
        readBLContactsfromAssetsXMLToDB("list.xml");
        pref.edit().putBoolean("isFirst", false).commit();
    }

    addQuickActions();
}

person user474026    schedule 27.06.2013    source источник
comment
См. stackoverflow.com/questions/11752961/.   -  person frogmanx    schedule 27.06.2013


Ответы (1)


Сначала вы можете использовать AsyncTask для выполнения процессов, которые занимают много времени. Если вы не в курсе, it allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.

Но если вы настаиваете на том, чтобы не использовать это, то, поскольку вы блокируете поток пользовательского интерфейса, вы не можете одновременно отображать диалог и выполнять свои действия. Вам нужно иметь фоновый поток для длительного процесса и показывать диалоговое окно прогресса в потоке пользовательского интерфейса.

В Интернете есть много примеров AsyncTaks. Просто для образца:

private class OuterClass extend Activity{
    //....

    @Override
    public void onCreate(Bundle savedInstanceState) {
        new performBackgroundTask ().execute();
    }
    //....
    private class performBackgroundTask extends AsyncTask < Void, Void, Void > 
     {
        private ProgressDialog dia;
        // This method runs in UI thread before the background process starts.      
        @Override
        protected void onPreExecute(){
            // Show dialog
            dia = new ProgressDialog(OuterClass.this);
            dia.setMessage("Installing...");
            dia.show();   
        }

        @Override
        protected Void doInBackground(Void... params) {
            // Do all the stuff here ... 
            addQuickActions();            
        }

        // Ececutes in UI thread after the long background process has finished
        @Override
        protected void onPostExecute(Void result){
              // Dismiss dialog 
              dia.dismiss();
        }
      }
}

Вы можете увидеть Как отобразить диалоговое окно прогресса перед началом действия в Android?

Надеюсь это поможет.

person Shobhit Puri    schedule 27.06.2013