1

我有一个这样定义的类:(我有几页代码,但我只发布相关部分以提高可读性)。

现在,它本身并没有什么“错误”,而且效果很好,但是几天前有人告诉我,在我要从中制作对象的类上扩展“活动”并不是一个好主意(即,我将创建实例的类) - 我确实在我的代码中的某个位置创建了一个 MyGLRenderer 对象。

所以我的问题是:

1)扩展 Activity 是否“不好”?

2)如果是这样,为什么?

3)如果是这样,我如何使用runOnUIThread创建我的 soundPool 类?

如果可以,那么我会留下它,但如果它可能会造成大问题,如果有人可以让我知道访问它的替代方法,我将不胜感激。

(我的类是单独的文件,不是外部类和内部类,我需要在这个类中创建我的 SoundPool 对象,就像我在这个类中的所有初始化一样)。

代码

public class MyGLRenderer extends Activity implements GLSurfaceView.Renderer{

//Various pieces of code

public void onSurfaceChanged(){

runOnUiThread(new Runnable() {
        public void run() {
           sound = new soundMan(curView.getContext()); 

}

}

4

1 回答 1

2

扩展 Activity 是否“不好”?

如果它不是由 开始的真正活动,startActivity()那么是的,它是“坏的”。

如果是这样,为什么?

因为很多事情都无法正常工作。这是一个小小的奇迹runOnUiThread(),并且无法保证它会在Activity修改后继续工作。实际上,它完全有可能无法在某些较旧的设备上运行,或者在制造商以Activity适用于实际活动的方式进行修补但会因像您这样的误用而中断的设备上运行。

如果是这样,我如何使用 runOnUIThread 创建我的 soundPool 类?

你没有。使用其他工具(例如调用or )来路由要在主应用程序线程上完成的工作post()ViewHandler

于 2013-05-06T23:38:52.487 回答