java - Android - 使用多个线程执行不同的功能

标签 java android multithreading service timer

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

enter image description here

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

  2. Web-/Database-Server 使用事件 ID 甚至函数名称进行响应。

  3. APP 打开一个新线程,执行带有 id 的事件,或者更好的是直接使用函数名。

我的问题是:

  1. 这是表演吗?或者这会很容易崩溃吗?
  2. 它是否仅限于进程中的 2 个线程,或者我什至可以每次为我要执行的函数打开一个新线程吗?可能是因为其他功能还在运行?
  3. 如何使用返回值执行函数?例如

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

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

结果应该是:一个线程每 10 秒询问我的 Web-/Database-Server 是否有事件。该事件在一个线程中执行,并且这是并行工作的(同时不会崩溃,甚至不会卡住)。

这些线程的示例代码将不胜感激。

到目前为止我的代码:

public class service extends Service { 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;
   } }

最佳答案

  1. 这是表演吗?或者这会很容易崩溃吗?
    • 是的,这会影响性能。每 10 秒请求一次 api 也会耗尽您的电池。
    • 通过适当的异常处理,它不会轻易崩溃。

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

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

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

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

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

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

关于java - Android - 使用多个线程执行不同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26126284/

相关文章:

java - 停止 JUnit 完成,直到所有其他线程都已停止

java - 避免等待 Servlet 流

android - 如何将 apk 分发给有限的用户。而且他们不能重新分发给其他人?

android - 启动项目时出现无法理解的错误(gradle)

android - onDestroy,杀死正在运行的线程

Python无法启动新线程多处理

java - keystore 类型 : which one to use?

javax.naming.Reference 无法转换为 javax.sql.DataSource 错误

java - 在随机位置用固定数量的宝藏填充二维字符数组

java - thread.sleep(5000) 不起作用