Android全局变量失效的问题

2014-11-24 10:44:22 ? 作者: ? 浏览: 0

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


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


class MyApp extends Application {


private String myState;


public String getState(){


return myState;


}


public void setState(String s){


myState = s;


}


}


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


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: