Android全局变量失效的问题

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

首先是从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系统在这个地方,捕获了段错误,杀掉了进程,然后又重启了一个新的进程。

相关推荐