我对Android编程非常新颖,但在其他语言中有一些经验。我想创建一个像这样工作的APP。Android - 通过多线程执行不同的功能
的APP是在问我的基于Web /数据库,服务器每10秒,如果有执行事件的过程。
的基于Web /数据库,服务器则以事件ID甚至函数名。
- 的APP打开一个新的线程,其执行与ID甚至更好的直接函数名的事件。
我的问题是:
- 这是perfomant?或者这种冲突很容易吗?
- 是不是仅限于2个线程的过程中或可我连打开每一次的,我要执行的功能一个新的线程?也许是因为其他功能仍在运行?
如何用返回值执行函数?例如
InputStream in = response.getEntity().getContent(); //Get the data in the entity
public in(void) { // execute a function which got´s the same name as the variable "in" }
结果应该是:一个线程每10秒我的基于Web /数据库,服务器,询问是否有一个事件。事件在一个线程内执行,并行工作(同时不会崩溃或甚至陷入困境)。这些线程
示例代码,将不胜感激。
我的代码,直到尚未:
公共类服务延伸服务{ 私有静态最后弦乐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操作。附注:我发明了这个词的性格!我一直在使用它多年。 – danny117 2014-09-30 18:40:38
也是一个不错的解决方案。我也在考虑这个问题,但是如果手机在一定时间范围内不能收到短信,是否有可能进入睡眠模式?如果手机是永久听音,这是真的有效还是浪费电池? – user3325230 2014-09-30 18:49:11