Я сделал очень простое приложение. В основном у меня есть активность A, которая запускает действие B, если кнопка нажата. Итак, вот кодAndroid startactivity freezes приложение
openMapFAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), MapActivity.class);
intent.putExtra("routeId", id);
startActivity(intent);
}
});
Но вот в чем проблема. активность B очень тяжелая (она в основном открывает карту (mapsforge) и выполняет другие тяжелые вычисления). Поэтому при нажатии кнопки мой пользовательский интерфейс замерзает около 4 секунд, а затем я активирую активность B. Я хотел бы показать некоторую анимацию, например, индикатор хода круга или что-то в этом роде. Так можно ли начать работу не в потоке пользовательского интерфейса?
Вот что я пытался до сих пор
new Thread(new Runnable() {
@Override
public void run() {
while (progressStatus < 100) {
progressStatus += 25;
handler.post(new Runnable() {
@Override
public void run() {
//animation code
}
});
try {
Thread.sleep(1600);
if (progressStatus == 100){
Intent intent = new Intent(getActivity(), MapActivity.class);
intent.putExtra("routeId", id);
startActivity(intent);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
Однако это не совсем то, что мне нужно. Любые решения или предложения?
Если тяжелый код находится внутри MapActivity, это не сработает. Вы должны попытаться реорганизовать MapActivity для перемещения кода, например. потоки или асинтесы. Добавьте код для MapActivity, если вам нужна помощь – mlidal