我似乎在这里相当多!!
我知道这个问题已经在这里和其他地方被提出过,我已经尝试过实施的答案,但这对我不起作用
我有一个基于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个小时了,它正在融化我的头脑,我确信这很简单,但只有当你知道如何!!
此致 加里
答案 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();