在线程之间来回获取整数值的正确方法是什么?
我有两个运行run(){}函数的线程。一个是接收/发送USB消息,一个是运行游戏UI。他们都独立工作。使用USB中的数据修改游戏的价值是问题所在。
到目前为止我尝试过:我尝试创建一个名为container的全局对象,它包含一个公共int变量,并将其传递给两个线程进行通信,但是在运行时它会使程序崩溃。
编辑:我可以将文件保存到SD卡并让其他线程查看吗?线程1需要写入SD卡,线程2需要读取它。不需要双向通信。
编辑:如果有办法创建一个应用程序范围,int类型的全局变量,或包含int的应用程序范围对象,将起作用。如果这样做存在,我想这样做。
答案 0 :(得分:3)
您应该坚持使用Android线程模型。例如,请参阅this。
UI线程是Android中的主要线程。 如果您的UI线程不是主线程,那么您做错了。
从上面的链接,不要使用AsyncTask,因为你需要多次修改UI的东西(我推测)。改为打电话
myActivity.runOnUIThread(new Runnable() {
@Override
public void run() {
someUIelement.setValue(someIntReadFromUSB);
}
}
从您的线程中读取USB。当您声明Runnable时,您需要在范围内包含someUIElement
和someIntReadFromUSB
。如果它们是该范围内的局部变量,则必须确保它们是final
个变量。 (如果必须声明整数final,则可以在定义Runnable之前声明一个新的final变量,并复制要发送给它的值。)
答案 1 :(得分:2)
答案 2 :(得分:0)
来自
“我可以将文件保存到SD卡并让其他线程查看吗?线程1需要写入SD卡,线程2需要读取它。不需要双向通信。”
我想你可以试试java.util.concurrent.SynchronousQueue。
顺便说一下,我对Android一无所知,但在纯java中,这应该可行。