活动A启动活动B,如何关闭活动A.

时间:2013-04-23 13:30:33

标签: android android-intent android-activity

我似乎在这里相当多!!

我知道这个问题已经在这里和其他地方被提出过,我已经尝试过实施的答案,但这对我不起作用

我有一个基于if语句的活动(Activity A),它启动Activity B。我的问题是Activity A一直在运行,在Activity A我发出警报并振动手机,两个都继续前进,而Activity B启动和运行(我可以在logcat中看到)它永远不会因此而走到了前面。

这是我的if语句的代码

        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 ...我应该在我开始时关闭菜单活动{{ 1}?

提前致谢!

修改

我不确定为什么要进行downvote,但我会尝试解释我的问题,我有三个活动A,B,C。A是我的菜单,点击按钮后启动活动B,在活动B中,基于if语句的结果,活动C开始。

问题是C运行,进程可以在logcat中看到但是没有打开。 B继续播放警报并振动,然后电话停止并且警报和振动继续。我有上面的if语句的代码和openMaps()函数的代码,这是基于if的结果调用的,其中我尝试打开Activity C并关闭B

我希望更清楚;)

另一个编辑

好吧,我知道问题是什么,我只是不知道如何解决它。我有一个线程,在该线程内部是一个infinate while循环,在这个无限的while循环中我检查两个坐标之间的距离(我希望它们不断更新)。

问题是,我已经全局声明的变量在循环中初始化,所以我必须在其中运行我的if语句,以访问那些...我尝试使用布尔'test',如果它是真的执行if语句然后将测试设置为假,但这不起作用我害怕。

这是我的代码

Activity A

并且继承了MapsTimer任务

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();

我在if语句中调用完成。我已经在这里呆了10个小时了,它正在融化我的头脑,我确信这很简单,但只有当你知道如何!!

此致 加里

2 个答案:

答案 0 :(得分:1)

您的问题和代码不清楚,但一般情况下,在您切换到活动B的代码之后,您应该调用finish()来完成活动A

答案 1 :(得分:0)

感谢大家的帮助,我自己整理了一下。我刚刚在while循环中插入了一个break。如下:

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,它会突破无限循环,不再需要它,然后我调用finish();