我目前正在开发一款应用程序,它允许用户通过UDP将传感器数据发送到OSC receiver,没有恶意,用户可以完全控制所有内容。
当用户启用数据发送时,如果用户启用此传感器和轴进行传输,则每个传感器更改事件都会触发数据包的分派。
这可能导致要发送大量数据,例如如果用户想要用他手机中的大量参数来控制合成器(想想在空间方向改变音色的同时跳跃引发的鼓声)。
我现在测试了以下方法,但每个方法在不同的Android版本上都存在缺点和/或崩溃:
AsyncTask<String, Void, Boolean>
并在doInBackground(String... strings)
中发送数据。这种方法的缺点是Android 2.3.3中可能java.util.concurrent.RejectedExecutionException
,因为这可能会创建太多线程。IntentService
并发送数据onHandleIntent(Intent intent)
。这种方法的缺点是Android 2.3.3中的用户界面缓慢且无响应。Service
并在服务的公开功能上发送数据。这就像Android 2.3.3上的魅力一样,但在Android 4.4.4上使用android.os.NetworkOnMainThreadException
崩溃。还有哪些其他可能性?在绑定AsyncTask<>
中运行Service
是否会遇到两个例外中的任何一个?
答案 0 :(得分:1)
为什么不使用单个线程而不是AsyncTask?在其中有一个等待数据发布到它的事件循环,然后将数据发送到服务器?基本上它是一个AsyncTask,它永远不会结束并在数据发布到它之前休眠。该线程可以由活动或服务拥有,无论哪个对您有意义。
顺便说一下,你的这个应用程序会杀死你的电池。但我怀疑你知道这一点并且没问题。