【发布时间】:2011-02-22 15:58:18
【问题描述】:
我有一个本机 C 函数(当然是 JNI),它应该回调一个 java 方法来显示一个对话框,但这个对话框永远不会显示。
这就是它的工作原理:
- C 代码调用 java 方法
- java 方法记录一些东西
- 然后它调用
showDialog(SOME_ID) -
onCreateDialog(SOME_ID)被调用 - 对话框是使用
AlertDialog.Builder构造的 - 当我调用
AlertDialog alert = builder.create()时,应用程序会停在那里(没有崩溃或冻结),但仅当此调用从 C 代码开始时。
代码如下:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case SOME_ID:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Message");
builder.setPositiveButton(...);
builder.setNegativeButton(...);
AlertDialog alert = builder.create();
System.out.println("...Never called from JNI");
return alert;
}
return null;
}
在 6 我的意思是我在调用builder.create() 之后和 之前记录了一些东西,但是create 方法之后的日志之后 永远不会调用,因此该方法永远不会返回,并且永远不会创建对话框。我有一个按钮来触发对话框,并且正如预期的那样,它可以工作。
我做了另一个测试,我打印了 getApplicationContext() 直接从 onCreate() 和 onCreateDialog() 调用(从 C 代码调用),它是相同的,因为我认为的第一件事是 onCreateDialog()正在从另一个上下文或其他东西中调用。
你知道为什么对话框没有显示吗?
【问题讨论】:
标签: android java-native-interface