2013-04-23 2 views
-2

Кажется, я здесь совсем немного!Деятельность 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

+0

Перед тем, как перемещать деятельность A-B, используйте инструкцию окончания. – itsrajesh4uguys

+0

Вы публикуете «Runnable», который работает в потоке пользовательского интерфейса (основной поток), и в этом «Runnable» вы спите в течение 5 секунд. По крайней мере, из кода, который вы опубликовали, я предполагаю, что код работает в потоке пользовательского интерфейса. Это плохо. Вы не хотите блокировать поток пользовательского интерфейса в течение 5 секунд. Кроме того, вибрация и звуки не будут блокировать «Активность» от входа в переднюю часть дисплея. Посмотрите на свой логарифм, возможно, есть другие признаки неприятностей. Не фильтруйте логарифм, вы можете пропустить важные вещи таким образом. –

+0

спасибо Дэвид, я немного изменил свой код, я знаю, в чем проблема, я просто не уверен, как с этим справиться. –

ответ

0

Спасибо всем для всей вашей помощи я сам ее отсортировал. Я просто вставил разрыв в цикле while. Как следует:

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 = Math.round(distance * 100.0)/100.0; 
       DisRound = 550; 

       dynamicActivation = DisRound * weight;       

       try { 
        Thread.sleep(1000); 

         if(dynamicActivation > threshold) 
         { 
          proximityAlert.show(); 
          alarmSound.start(); 
          new Timer().schedule(new MapsTimer(), 5000); 
          break;       
         } 
         Log.d("ACTIVATION", Boolean.toString(test)); 

       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      finish(); 
     } 
    }); 
    dist.start(); 

Так как только предупреждение показано, сигнал воспроизводится, и mapsTimer называется, он распадается из бесконечного цикла, он больше не нужен, и тогда я называю отделку() ;

1

Ваш вопрос и ваш код не ясны, но в целом после того, как код, который вы переключитесь активности B Вы должны назвать отделку(), который закончить задание А

+2

это должно быть в комментарии вместо ответа ... – SilentKiller

+0

вы можете видеть из моего кода, который я называю финишем(), но, к сожалению, этого не происходит, поэтому мне нужно знать, что я делаю неправильно, или что могу сделать, чтобы исправить это, если кто-то может помочь, это было бы здорово –