Начать работу с Android так медленно

Я хочу открыть новую активность:

Intent intent = new Intent(homeScreen.this, EmployeeService.class); Bundle b = new Bundle(); b.putInt(Constants.SERVICE_DETAIL_L1_ID_MSG, ServiceIndex.SRV_L1_EMPLOYMENT); b.putInt(Constants.SERVICE_DETAIL_FOCUS_POS_MSG, 2); intent.putExtras(b); startActivity(intent); 

Но это займет так много времени, чтобы сделать Activity Activity (EmployeeService) заметным. Из Logcat я вижу:

 05-14 23:43:31.727: INFO/ActivityManager(59): Displayed activity fr.playsoft.happylille/.employee.EmployeeService: 7050 ms (total 7050 ms) 

Я не могу поверить, что требуется больше 7 секунд, чтобы открыть новое мероприятие. Я добавляю журнал onCreate (), но вижу, что он занимает всего 5 мс, чтобы закончить onCreate.

Может ли кто-нибудь сказать мне, как найти корень этой проблемы?

Вы должны переместить код Html.fromHtml(desc); К потоку, чтобы он был асинхронным. Этот поток можно безопасно запустить во время onCreate() недавно открытого Activity .

В конце этого потока вы можете запустить tvDesc.setText() из потока пользовательского интерфейса:

 class ExampleThread extends Thread { @Override public void run() { final Spanned spannedText = Html.fromHtml(desc); yourNewlyOpenedActivity.runOnUiThread(new Runnable() { @Override public void run() { tvDesc.setText(spannedText); } }); } } 

В общем, 7 секунд на устройстве, возможно, означает 20 на другом, поэтому будьте осторожны с ANR !

(Отредактировано далее на комментарий Мальчика ниже, прежняя версия этого ответа больше не была точной / достоверной)

Ответ Shlublu неверен, вам не разрешено обновлять пользовательские интерфейсы из потоков, отличных от UI!

Сначала это работает, но это просто удача, время.

Просто быстрый уродливый тест доказывает, что он пойдет не так в правильное время. Здесь я устанавливаю текст каждые 100 мс. Сбой примерно через 1 секунду:

  new Thread() { @Override public void run() { while (true) { someTextView.setText("bla"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); 

Он выкинет эту ошибку: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Я думаю, вы должны выполнить Html.fromHtml(desc) через AsyncTask или RxJava

Ваш открытый новый код действия помещен в Thread. И запуск кода может быть меньше времени, необходимого для открытия другого действия. Может быть, полезно.