我正在开发一款使用表面视图来表示ui图形的安卓游戏。如果用户触摸特定区域,我需要实现一个方法来启动另一个活动。 为此我将主(前景)活动的当前实例传递给表面视图
我可以轻松处理触摸,但无法从收到的实例启动活动。
**指如果我从
的接收实例中调用startActivity方法当前活动发生异常,表明它是来自非的呼叫 UI线程**
我正在使用扩展到表面视图的类并将其传递给绘制其画布的线程
答案 0 :(得分:3)
SurfaceView是否在活动中? 如果是这样,请使用
runOnUiThread(new Runnable() {
public void run() {
//startActivity
}
});
如果你不在活动中,你真的不应该开始其他活动..
SurfaceView还有一个post和postDelayed方法,可用于在UI线程上发布Runnables。
post(new Runnable() {
public void run() {
//startActivity
}
});
答案 1 :(得分:1)
我认为你可以这样做......
runOnUiThread(new Runnable() {
public void run() {
// start your activity here
}
});
答案 2 :(得分:1)
您可以使用:
// from MySurfaceView/Activity
Context context = getContext();
//EffectingActivity is another activity
Intent intent = new Intent(context, EffectingActivity.class);
context.startActivity(intent);