2014-09-30 66 views
1

我对Android编程非常新颖,但在其他语言中有一些经验。我想创建一个像这样工作的APP。Android - 通过多线程执行不同的功能

enter image description here

  1. 的APP是在问我的基于Web /数据库,服务器每10秒,如果有执行事件的过程。

  2. 的基于Web /数据库,服务器则以事件ID甚至函数名。

  3. 的APP打开一个新的线程,其执行与ID甚至更好的直接函数名的事件。

我的问题是:

  1. 这是perfomant?或者这种冲突很容易吗?
  2. 是不是仅限于2个线程的过程中或可我连打开每一次的,我要执行的功能一个新的线程?也许是因为其他功能仍在运行?
  3. 如何用返回值执行函数?例如

    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; 
    } } 
+0

轮询(每10秒)不是一个好的解决方案,因为您的应用程序将无法从服务器断开连接。您应该修改您的需求,并且可能需要端口解决方案,服务器可以在您的应用处理新消息时进行ping操作。附注:我发明了这个词的性格!我一直在使用它多年。 – danny117 2014-09-30 18:40:38

+0

也是一个不错的解决方案。我也在考虑这个问题,但是如果手机在一定时间范围内不能收到短信,是否有可能进入睡眠模式?如果手机是永久听音,这是真的有效还是浪费电池? – user3325230 2014-09-30 18:49:11

回答

2
  1. 这是perfomant?或者这种冲突很容易吗?
    • 是的,这将是性能打击。每10秒询问一次api会耗尽你的电池。
    • 通过适当的异常处理,它不会轻易崩溃。

是不是仅限于2个线程的过程中还是可以的我甚至每天开放的时间,我要执行的功能,一个新的线程?也许是因为其他功能仍在运行?

  • 您可以运行你想要的线程,但是将很难在
    情况下保持代码。你可以使用VOLLY或OKHTTP来处理网络相关的事情,他们也会处理你的线程 。

如何用返回值执行函数?例如

InputStream in = response.getEntity()。getContent();在实体 //获取数据

公共在(无效) { //执行哪个got's相同的名称为“在” 变量的函数}

  • 对于调用方法在运行时使用方法名称,你可以在java中使用REFLECTION。这将满足您的需求。
+0

嘿苏海尔梅塔!非常感谢这个解释! :)我会尽力通过你发布的这个东西:)真的很感谢! :)其他技巧,甚至提示,当然还是赞赏! – user3325230 2014-09-30 18:36:29

+0

在这篇文章中发现了许多有用的东西,尤其是凌空。 – user3325230 2014-10-03 18:50:26

+0

谢谢,我的荣幸:) – 2014-10-04 09:18:12