【问题标题】:Android - executing different functions with multiple threadsAndroid - 使用多个线程执行不同的功能
【发布时间】:2014-11-25 09:40:56
【问题描述】:

我对 Android 编程很陌生,但在其他语言方面有一些经验。我想创建一个原理是这样工作的APP。

  1. APP 是一个进程,它每 10 秒询问我的 Web-/Database-Server 是否有要执行的事件。

  2. Web-/Database-Server 使用事件 id 甚至函数名称来回答。

  3. APP 会打开一个新线程,该线程使用 id 或直接使用函数名执行事件。

我的问题是:

  1. 这是高性能的吗?或者这种冲突很容易发生吗?
  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-/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


【解决方案1】:
  1. 这是高性能的吗?或者这种碰撞很容易吗?
    • 是的,它会影响性能。每 10 秒请求一次 api 也会耗尽您的电池电量。
    • 通过适当的异常处理,它不会很容易崩溃。

它是否仅限于进程中的 2 个线程,或者我什至可以每次为我想要执行的函数打开一个新线程?可能是因为其他功能还在运行?

  • 您可以运行任意数量的线程,但在其中维护代码会很困难
    案子 。您可以将 VOLLY 或 OKHTTP 用于与网络相关的事情,他们将处理您的线程 部分也。

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

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

公开在(无效) { // 执行一个与变量“in”同名的函数 }

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

【讨论】:

  • 嘿苏海尔梅塔!非常感谢这个解释! :) 我会尝试通过你发布的这些东西 :) 真的谢谢! :) 当然,其他提示甚至提示仍然值得赞赏!
  • 在这篇文章中发现了很多有用的东西,尤其是 volley。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多