Вопрос:

Код Android Db вешает мое приложение на 10 секунд, появляются черные экраны, которые показывают зависание после этой активности

android android-activity

46 просмотра

2 ответа

11 Репутация автора

Вот мой код для mystartup Acitivty. при запуске я помещаю код БД, где я показываю сообщение о загрузке БД ... и т. д. он работает нормально, но проблема в следующем коде, который вызывает черный экран на 5-10 секунд. После этого все ок. Так что я не хочу быть в этом состоянии.

// создаем событие mystartup activty вот код

    SharedPreferences prefre=this.getSharedPreferences("firstt",this.MODE_PRIVATE);
    boolean firsttimes=prefre.getBoolean("firstt", true);

    if(firsttimes)
    {
        SharedPreferences.Editor editere=prefre.edit();
        editere.putBoolean("firstt", false);
        editere.commit();

        MyAlterts alterts=new MyAlterts();
        alterts.ShowMsgWithOk(this,"db loaded ..... wait");

        //calling db functions first run so that optmize next time
        DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
        databaseAccess.openreadabledb();

        //db code here also
        return;
    }
Автор: user3419461 Источник Размещён: 08.04.2017 06:43

Ответы (2)


0 плюса

546 Репутация автора

Все операции с БД должны выполняться в фоновом режиме, иначе приложение застрянет с черным экраном. Так что вам придется перенести операцию db в асинхронную задачу.

Автор: fightingCoder Размещён: 08.04.2017 07:17

0 плюса

137 Репутация автора

Запросы к базе данных должны выполняться в отдельном фоновом потоке. Это простой способ сделать это, используя AsyncTask.

открытый запрос класса расширяет AsyncTask {

    @Override
    protected String doInBackground(String... strings) {
        Stirng result="";

        //Make your Database Requests here, you can store the result in the //string result which is what this method will return

        return result;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        //After doInBackground method has finished executing, the result //will be stored in the perimeter variable above 'result'
        //process your result here

    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        //you can implement an action here e.g a progress dialog to run //when this class is executed, call dialog.dismiss() in onPostExecute
        //and dialog will be dismissed after the result has been received //ni onPostExecute


    }


}

Наконец, продолжайте и выполните этот метод в вашем onCreate ().

request req = new request();
req.execute();
Автор: Gordon Android Javalist Размещён: 08.04.2017 07:42
Вопросы из категории :
32x32