linux全局变量新开窗口失效,Android全局变量失效的问题

博客探讨了在Android应用中使用自定义Application类实现全局变量时遇到的异常情况。当SurfaceView设置为可聚焦并调用hide()方法后,全局变量包括C侧全局变量会失效。问题根源可能在于未初始化的surfaceControl导致系统错误处理,进程被重启。文章深入分析了可能的原因和现象,并提出了问题所在。
摘要由CSDN通过智能技术生成

很多网站说到下面的方法可以实现全局变量

首先是从Application类派生一个自己的app类,

class MyApp extends Application {

private String myState;

public String getState(){

return myState;

}

public void setState(String s){

myState = s;

}

}

然后是在AndroidManifest.xml中修改Application定义

增加android:name=".MyApp"

这样就可以在程序中使用全局变量了

class Blah extends Activity {

@Override

public void onCreate(Bundle b){

...

MyApp appState = ((MyApp)getApplicationContext());

String state = appState.getState();

...

}

}

理论上说,只要进程不destory,这个全局变量是一定有效的,但使用中,我发现有异常情况,

我在使用SurfaceView的时候,如果使用了

this.setFocusableInTouchMode(true);

则这个SurfaceView会导致全局变量失效,包括App在内的所有对象都会被析构,以后再访问的时候,会重建。

这个问题很奇怪,找来找去,最后问题归到JNI代码上,

在JNI C侧代码,有这样一句:

surfaceControl->hide();

目前确定就是这一句导致所有全局变量失效,包括C侧的全局变量也会失效。

估计是这一句,导致Android系统认为本进程被终止了,或者后续界面是属于另一个进程的,因此重新启了

一个新进程来继续后面的工作。

经分析,实际上是这个surfaceControl没有初始化。但这个也很奇怪,没有初始化,怎么没出段错误,

而只是出现全局变量失效的问题,其它都一切正常?

可能是Android系统在这个地方,捕获了段错误,杀掉了进程,然后又重启了一个新的进程。0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值