Кажется, я здесь совсем немного!Деятельность A начинает активность B, как закрыть Деятельность A
Я знаю, что этот вопрос был задан уже здесь и в других местах, и я попытался реализовать ответы размещены, но это не работает для меня
У меня есть деятельность, (Activity A
) на основе, если заявление, начинается Activity B
. Моя проблема Activity A
продолжает работать, а в Activity A
Я играю будильник и вибрирую телефон, и продолжаю двигаться, и в то время как Activity B
запускается и запускается (я вижу в логарифме), из-за этого он никогда не выходит на фронт.
Вот мой код мой, если заявление
if (dynamicActivation > threshold) {
alarmHandler.post(new Runnable() {
public void run() {
int duration = Toast.LENGTH_SHORT;
CharSequence text = "YOUR CHILD HAS TRAVELLED OUTSIDE PROXIMITY";
Context context = getApplicationContext();
proximityAlert = Toast.makeText(context, text,
duration);
proximityAlert.show();
alarmSound.start();
//v.vibrate(3000);
try {
Thread.sleep(5000);
openMaps();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
А вот код из функции openMaps()
public void openMaps() {
Class track = ParentReal.class;
Intent PRealIntent = new Intent(this, track);
PRealIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(PRealIntent);
ANN.this.finish();
}
Я должен добавить, в случае, если это вызывает проблемы в том, что есть другая деятельность, меню, после нажатия кнопки открывается Activity A
... должен ли я закрывать активность меню, как только я начинаю Activity A
?
Заранее благодарен!
EDIT
Я не уверен, почему downvote, но я попытаюсь объяснить мою проблему, у меня есть три вида деятельности A, B, C. А мое меню, после нажатия кнопки его запускает Activity B, в действии B, на основе результата инструкции if запускается действие C.
Проблема C работает, процессы могут быть видны в logcat, но не открываются. B продолжает воспроизводить сигнал тревоги и вибрировать, а затем телефон останавливается, а сигнал тревоги и вибрация продолжаются. У меня есть код для оператора if выше и код для функции openMaps(), это называется на основе результата if, в котором я пытаюсь открыть Activity C и закрыть B
Надеюсь, что понятнее;)
ДРУГОЙ EDIT
нормально, у меня есть идея, что проблема есть, я просто не знаю, как ее решить. У меня есть поток, внутри которого поток является инфинальным циклом, внутри этого бесконечного цикла while я проверяю расстояние между двумя координатами (я хочу, чтобы они постоянно обновлялись).
Проблема заключается в том, что переменные, которые я объявил глобально, инициализируются внутри цикла, поэтому я должен запускать в нем оператор if, чтобы получить доступ к этим ... Я попытался использовать логический «тест», который, если он истинный, выполняет if а затем установите тест на false, но это не работает. Я боюсь.
вот мой код
Thread dist = new Thread(new Runnable() {
public void run() {
while (true) {
child = new Location("point A");
child.setLatitude(Clatitude);
child.setLongitude(Clongitude);
parent = new Location("point B");
parent.setLatitude(Platitude);
parent.setLongitude(Plongitude);
distance = child.distanceTo(parent);
DisRound = 550;
dynamicActivation = DisRound * weight;
try {
Thread.sleep(1000);
if (test)
{
if(dynamicActivation > threshold)
{
finish();
new Timer().schedule(new MapsTimer(), 5000);
test = false;
}
Log.d("ACTIVATION", Boolean.toString(test));
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
dist.start();
и Heres задача MapsTimer
private class MapsTimer extends TimerTask {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
int duration = Toast.LENGTH_SHORT;
CharSequence text = "YOUR CHILD HAS TRAVELLED OUTSIDE PROXIMITY";
Context context = getApplicationContext();
proximityAlert = Toast.makeText(context, text, duration);
proximityAlert.show();
alarmSound.start();
openMaps();
}
});
}
}
Я зову закончить в если заявление. Я вот уже 10 часов, и он тает мне в голову, я уверен, что это просто, но только тогда, когда вы знаете, как это сделать!
С уважением, Gary
Перед тем, как перемещать деятельность A-B, используйте инструкцию окончания. – itsrajesh4uguys
Вы публикуете «Runnable», который работает в потоке пользовательского интерфейса (основной поток), и в этом «Runnable» вы спите в течение 5 секунд. По крайней мере, из кода, который вы опубликовали, я предполагаю, что код работает в потоке пользовательского интерфейса. Это плохо. Вы не хотите блокировать поток пользовательского интерфейса в течение 5 секунд. Кроме того, вибрация и звуки не будут блокировать «Активность» от входа в переднюю часть дисплея. Посмотрите на свой логарифм, возможно, есть другие признаки неприятностей. Не фильтруйте логарифм, вы можете пропустить важные вещи таким образом. –
спасибо Дэвид, я немного изменил свой код, я знаю, в чем проблема, я просто не уверен, как с этим справиться. –