我在使用codenameone的地方,我需要在android中做一些本机代码,但这会改变内容视图,当我尝试使应用程序返回到codenameone表单时,使用的本机代码最终会出现白屏,

无论如何,我可以使用codenameone处理来自android本机代码的导航的showForm吗?

在尝试下面的波纹管注释后,这里是模拟案例时该应用程序的日志猫:

??-?? ??:??:??.???: INFO/<unknown>(<unknown>): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.mycompany.myapp/.MyApplicationStub bnds=[540,672][786,960]} from uid 10010 on display 0 from pid 1738??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Start proc 31254:com.mycompany.myapp/u0a352 for activity com.mycompany.myapp/.MyApplicationStub??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Gaining focus: Window{252c6842 u0 com.mycompany.myapp/com.mycompany.myapp.MyApplicationStub}??-?? ??:??:??.???: INFO/<unknown>(<unknown>): [AppLaunch] Displayed Displayed com.mycompany.myapp/.MyApplicationStub: +335ms??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Thread[1,tid=31254,WaitingForJniOnLoad,Thread*=0x7facc9a000,peer=0x760befb0,"main"] recursive attempt to load library "/data/app/com.mycompany.myapp-1/lib/arm64/libopentok.so"??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Thread[1,tid=31254,WaitingForJniOnLoad,Thread*=0x7facc9a000,peer=0x760befb0,"main"] recursive attempt to load library "/data/app/com.mycompany.myapp-1/lib/arm64/libopentok.so"??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Thread[1,tid=31254,WaitingForJniOnLoad,Thread*=0x7facc9a000,peer=0x760befb0,"main"] recursive attempt to load library "/data/app/com.mycompany.myapp-1/lib/arm64/libopentok.so"??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Thread[1,tid=31254,WaitingForJniOnLoad,Thread*=0x7facc9a000,peer=0x760befb0,"main"] recursive attempt to load library "/data/app/com.mycompany.myapp-1/lib/arm64/libopentok.so"??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Thread[1,tid=31254,WaitingForJniOnLoad,Thread*=0x7facc9a000,peer=0x760befb0,"main"] recursive attempt to load library "/data/app/com.mycompany.myapp-1/lib/arm64/libopentok.so"??-?? ??:??:??.???: INFO/<unknown>(<unknown>): setMode: mode = 3; packageName = com.mycompany.myapp??-?? ??:??:??.???: INFO/<unknown>(<unknown>): setMode: mode = 0; packageName = com.mycompany.myapp??-?? ??:??:??.???: INFO/<unknown>(<unknown>): at com.mycompany.myapp.VideoChat$1.run(Unknown Source)??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Process: com.mycompany.myapp, PID: 31254??-?? ??:??:??.???: INFO/<unknown>(<unknown>): at com.mycompany.myapp.NativeVideoChatImpl$VideoChat$4.onClick(NativeVideoChatImpl.java:234)??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Force finishing activity 1 com.mycompany.myapp/.MyApplicationStub??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Losing focus: Window{252c6842 u0 com.mycompany.myapp/com.mycompany.myapp.MyApplicationStub}??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Process com.mycompany.myapp (pid 31254) has died??-?? ??:??:??.???: INFO/<unknown>(<unknown>): channel '252c6842 com.mycompany.myapp/com.mycompany.myapp.MyApplicationStub (server)' ~ Consumer closed input channel or an error occurred. events=0x9??-?? ??:??:??.???: INFO/<unknown>(<unknown>): channel '252c6842 com.mycompany.myapp/com.mycompany.myapp.MyApplicationStub (server)' ~ Channel is unrecoverably broken and will be disposed!??-?? ??:??:??.???: INFO/<unknown>(<unknown>): WIN DEATH: Window{252c6842 u0 com.mycompany.myapp/com.mycompany.myapp.MyApplicationStub}??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Attempted to unregister already unregistered input channel '252c6842 com.mycompany.myapp/com.mycompany.myapp.MyApplicationStub (server)'

最佳答案

请参见advanced section in the developer guide标题为“本机代码回调”。

创建一个静态方法,例如创建表单的类中的showForm()。在您的原生Android代码中,您可以使用实现该方法的类的完整程序包名称来调用该方法,例如:com.mycompany.myapp.MyFormClass.showForm()

然后,实现该方法的类需要对表单进行引用,因此它可以是创建表单并保留对表单的静态引用的类。为了保留内存,如果您取消了表格,则可能要释放引用。

在iOS和其他平台中,请遵循开发者指南中的指南,例如在这种情况下,对于iOS showForm(),其外观应如下所示(在.m文件的顶部:

#include "com_mycompany_myapp_MyFormClass.h"


然后,当您要呼叫showForm()时:

com_mycompany_myapp_MyFormClass_showForm__(CN1_THREAD_STATE_PASS_SINGLE_ARG);

10-06 13:48
查看更多