我的应用在 AsyncTask 中有一个每秒刷新一次的屏幕:
class BarRefresh extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
// doSomething();
while(redraw){
for(int i = 0; i < c.sets.size(); i++)
{
vals[i] = c.sets.get(i).getLast();
}
graph.updateVals(vals);
graph.postInvalidate();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(isCancelled()){
break;
}
}
return null;
}
}
点击其中一个对象会打开一个带有参数的新 Activity :
@Override
public boolean onTouch(View v, MotionEvent ev) {
// TODO Auto-generated method stub
float[] coords = new float[2];
coords[0] = ev.getX();
coords[1] = ev.getY();
int set = 0;
for(int i = 0; i < graph.values.length; i++){
if(graph.rects[i].contains(coords[0], coords[1]))
{
redraw = false;
Bundle chosen = new Bundle();
chosen.putInt("set", i);
Intent bb = new Intent(GraphTestActivity.this, LineGraphActivity.class);
bb.putExtras(chosen);
startActivity(bb);
// set = i;
}
}
//Toast t = Toast.makeText(GraphTestActivity.this, "KLIKNIETO " + set, Toast.LENGTH_SHORT);
//t.show();
return false;
}
在新的 Activity 构造函数中看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Bundle pick = getIntent().getExtras();
setNr = pick.getInt("set");
c = Common.getInstance();
set = c.sets.get(setNr);
graph = new LineGraph(LineGraphActivity.this, set);
setContentView(graph);
}
这里是事情变得奇怪的地方。在模拟器上一切正常(应用程序在 2.1 API 上,模拟器也是如此),但是当我在手机上加载它时,第二个 Activity 的五个或更多实例同时打开,我必须多次按下后退按钮返回原始屏幕的次数。
我的手机是 Samsung i5700 Spica And 2.3.7 (Cyanogen 7.2 NIGHTLY alpha)
最佳答案
您可能会收到多个 onTouch()
事件。通过调试器验证这一点。在模拟器上,它是相当 bool 值的,但在真实的触摸屏上,在您的手指接触屏幕的几微秒内,您可以接收到多个触摸事件。
如果您可以使用更高级的功能,如 onClick
而不是 onTouch
,请执行此操作。如果不能,则需要跟踪触地和触地事件,并且仅在触地尚未触地时才对触地使用react。
一种技巧是将您的 Activity 定义为单个实例,这样您就不会获得多个实例。不过,这几乎肯定不是正确的做法。
作为旁注,在您的代码中放置 Thread.sleep()
几乎总是表示存在潜在错误,并且代码编写不正确。如果您需要稍后在代码中发生某些事情,请使用 Handler.postDelayed()
或 Timer
。
关于android - 同一 Activity 的多个实例打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761677/