Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为了使用runOnUIThread而执行活动是否有任何问题?_Android_Android Activity_Extend_Soundpool - Fatal编程技术网

Android 为了使用runOnUIThread而执行活动是否有任何问题?

Android 为了使用runOnUIThread而执行活动是否有任何问题?,android,android-activity,extend,soundpool,Android,Android Activity,Extend,Soundpool,我有一个这样定义的类:(我有几页代码,但我只是为了可读性而发布相关部分) 现在,它本身并没有什么“错误”,而且它工作得很好,但几天前有人告诉我,在我将要创建对象的类(即,我将创建实例的类)上扩展“活动”不是一个好主意,我确实在代码中的某个点创建了MyGLRenderer对象 因此,我的问题是: 1)延长活动时间是否“不好” 2)如果是,为什么 3)如果是,我如何使用runOnUIThread创建我的soundPool类 如果可以的话,我会留下它,但如果它可能会造成大问题,如果有人能让我知道另一种

我有一个这样定义的类:(我有几页代码,但我只是为了可读性而发布相关部分)

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

因此,我的问题是:

1)延长活动时间是否“不好”

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()); 

}
}

延长活动时间是否“不好”

如果它不是一个真正的活动,由
startActivity()
启动,那么是的,它是“坏的”

若然,原因为何

因为很多事情都不能正常工作。
runOnUiThread()
起作用是一个小小的奇迹,而且不能保证它将来会随着
活动的修改而继续起作用。事实上,它完全有可能在一些旧设备上不起作用,或者制造商对
活动
进行了修补,使之适用于实际活动,但会因像您这样的误用而中断

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


你没有。使用其他工具,如在
视图上调用
post()
处理程序
,来路由要在主应用程序线程上完成的工作。

Hey@commonware-感谢您的帮助,这是非常有用的,非常感谢。奇怪,我的主要活动中没有startActivity()!!无论如何,请您举例说明如何使用runOnUIThread的替代(阅读:正确)方法-非常感谢您的帮助-thanks@Zippy:“奇怪,我的主要活动中没有startActivity()”--
startActivity()
是有人调用来显示活动的。例如,当用户启动“主活动”时,主屏幕将调用
startActivity()。“无论如何,您能举一个例子说明如何使用您的替代方案吗?”
post()
是一种方法。您可以在
处理程序
视图
上调用它,其中
视图
是所有小部件和容器的基类。你通过了
post()
rununuithread()
相同的
Runnable
。Gotya,我现在明白了,我试图寻找一个例子来说明这是如何工作的(post()/Runnable),但我似乎无法解决,请编辑你的答案,说明我如何在我的代码中实现这一点?我试过了,但我得到了“无法在未调用looper.prepare的线程内创建处理程序”,这正是我需要在UI线程上创建它的原因。谢谢。@Zippy:既然你显然在某处有一个
GLSurfaceView
,请在上面调用
post()