【发布时间】:2014-11-25 09:40:56
【问题描述】:
我对 Android 编程很陌生,但在其他语言方面有一些经验。我想创建一个原理是这样工作的APP。
APP 是一个进程,它每 10 秒询问我的 Web-/Database-Server 是否有要执行的事件。
Web-/Database-Server 使用事件 id 甚至函数名称来回答。
- APP 会打开一个新线程,该线程使用 id 或直接使用函数名执行事件。
我的问题是:
- 这是高性能的吗?或者这种冲突很容易发生吗?
- 是否仅限于进程中的 2 个线程,或者我什至可以每次为我想要执行的函数打开一个新线程?可能是因为其他功能还在运行?
-
如何使用返回值执行函数?例如
InputStream in = response.getEntity().getContent(); //Get the data in the entitypublic in(void) { // execute a function which got´s the same name as the variable "in" }
结果应该是:一个线程每 10 秒询问一次我的 Web-/Database-Server 是否有事件。该事件在一个线程中执行,并且并行工作(同时没有崩溃甚至卡住)。
这些线程的示例代码将不胜感激。
到目前为止我的代码:
公共类服务扩展服务{ private static final String TAG = "MyService";
@Override public IBinder onBind(Intent intent) { return null; } public void onDestroy() { Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); } @Override public int onStartCommand(Intent intent, int flags, int startid) { Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); Log.d(TAG, "onStart"); Thread thread = new Thread(new Runnable() { @Override public void run() { new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run() { System.out.println("Send GO!"); Device dev = new Device(); dev.getDeviceId(getBaseContext()); dev.getEmail(getBaseContext()); dev.sendDeviceItems(); } }, 0, 10000);//put here time 1000 milliseconds=1 second } }); thread.start(); return Service.START_STICKY; } }
【问题讨论】:
-
轮询(每 10 秒)不是一个好的解决方案,因为您的应用将无法在与服务器断开连接的情况下运行。您应该修改您的要求,可能还有一个端口解决方案,当服务器有新消息供您的应用程序处理时,它可以 ping 通。旁注:我发明了高性能这个词!我已经用了很多年了。
-
也是一个不错的解决方案。我也在考虑这个问题,但是如果手机在某个时间范围内没有收到消息,是否有可能进入某种睡眠模式?如果手机是永久监听,这真的有效还是浪费电池?
标签: java android multithreading service timer