- 打开动态壁纸时一直显示动态壁纸正在加载
报错信息: 无!(这是最难受的 /(ㄒoㄒ)/~~ )。
问题原因: 粗心导致!把本应返回的MyEngine对象写成了Engine。
问题代码块:
public class MyGLWallpaperService extends WallpaperService {
@Override
public Engine onCreateEngine() {
return new Engine();//<---------------就是这里
}
class MyEngine extends Engine{
//......
}
}
问题代码: return new Engine();
解决办法: 将onCreateEngine()
方法中返回的Engine改成MyEngine。
总结:本来百思不得其解,百度亦不得其解,但在不经意间掠过了代码的某一处就发现问题所在,真是造化弄人啊!所以同志们,在遇到这种bug时先不要worry,可能只是缘分未到,一定要按时睡觉!!!
- 打开动态壁纸时程序直接崩溃,显示xxxActivity已停止运行
报错信息:A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 2128 (GLThread 115)
问题原因: GLThread报错,具体未知(如果有知道的,欢迎评论指教)。
问题代码块:
class MyEngine extends Engine{
GLSurfaceView glView = null;
MyRender render = null;
//......
private void onCreate(SurfaceHolder holder){
super.onCreate(holder);
glView = new GLSurfaceView(MyGLWallpaperService.this);
final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000
||(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
&&(Build.FINGERPRINT.startsWith("generic"))
|| Build.FINGERPRINT.startsWith("unknow")
|| Build.MODEL.contains("google_sdk")
|| Build.MODEL.contains("Emulator")
|| Build.MODEL.contains("Android SDK built for x86");
//通知默认的EGLContextFactory和默认的EGLConfigChooser选择哪个EGLContext客户端版本。
if(supportsEs2){
glView.setEGLContextClientVersion(2);//<-------------------问题在这里
render = new MyRender(MyGLWallpaperService.this);
glView.setRenderer(render);
}else{
Toast.makeText(MyGLWallpaperService.this ,
"This device does not support OpenGL ES 2.0",
Toast.LENGTH_LONG).show();
}
}
//......
}
问题代码: glView.setEGLContextClientVersion(2);
解决办法: 将glView.setEGLContextClientVersion(2);
删掉。
总结:适合别人的代码不一定适合自己!