当前位置: 首页 > 知识库问答 >
问题:

如何在不阻塞应用程序的情况下保持线程处于活动状态?

方飞白
2023-03-14

为了在我的应用程序中执行一些IO操作,我编写了一个线程,它的run方法上没有任何东西,但它有几个其他方法,比如void write(字符串文件名,字符串数据)和void create(字符串文件号),所有这些方法都非常有效。我的问题是,我过去认为这个线程是在后台运行的,或者类似的东西,但是自从删除了主活动上的.run()语句后,调用所述方法仍然有效,我如何让一个线程运行并等待活动的消息而不阻塞应用程序?第二个问题是,既然这些方法仍在工作,这是否意味着当我从主活动调用它们时,它们正在主UI线程上执行?

共有3个答案

陶和歌
2023-03-14

为了在交付时制作一个处理东西的问题,你需要利用Android的原生东西,这是最好的选择:

  • 处理程序线程
  • 活套
  • 处理程序
  • 消息

例如,阅读这个和这个。

简成仁
2023-03-14

对于要在所述线程上运行的方法,您必须从该线程而不是从任何其他线程调用您的方法。

class WorkerThread extends Thread {
      public Handler mHandler;

      public void run() {
          Looper.prepare();

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

          Looper.loop();
      }
  }

然后使用<code>WorkerThread.mHandler。postRunnable或<code>SendMessage

穆宏胜
2023-03-14

您应该使用start()方法,而不是run()

使用run(),您正在调用线程中运行给定的Runnable

使用start()您将启动一个处理此Runnable的新线程

 类似资料:
  • 任何建议什么将是实施这种行为的最佳方式。 谢谢Bsengar

  • 我正在用Java编写一个服务器,它是多线程的。我有三个主要的活动线程,我从我的main方法开始构建: 例如,我的命令线程用于通过将输入“q”放入控制台窗口来停止服务器。命令的运行方法定义如下: *其中扫描定义为: 当我运行服务器时,我的所有线程都工作,除了命令线程,因为控制台不接受输入。 然后我意识到,如果我等待我的服务器线程(这是我最关心的线程)与我的主(静态方法)线程连接,我的命令线程就会起作

  • 我有一个作业,它有一个并行执行的块步骤(8个分区): 阅读器:jdbcCursorItemReader 处理器:使用jdbcTemplate调用数据库(每个分区1个线程) Writer:写入文件 我使用一个JdbcCursorItemReader从共享的Postgres数据库(V9.2)读取数百万数据。(其他用户同时使用数据库) 谢谢你的帮助

  • Project Reactor是否可以在一个mono中等待一个事件/条件,而不需要使用每个mono的阻塞线程?使用,我可以完成这样的事情,但我不知道如何使用Project Reactor。 我的问题是我需要将请求与响应相关联。响应时间变化很大,有些甚至永远不会得到回复和超时。在客户端,每个请求阻塞线程不是问题,但由于这是一个服务器应用程序,我不想最终导致每个请求产生一个线程阻塞等待响应。 API如

  • 假设我有这个方法: 我想调用这个方法,获取字符串,将该字符串转换为整数7,然后以非阻塞方式返回该整数。我该怎么做? 我试过这个,但是函数阻塞(同步): 我尝试使用代替(异步): 但是我得到了这个错误:<代码>类型不匹配:无法从int转换为Mono 那我该怎么办?

  • 我试图使用neo4j中的命令从CSV文件中导入大约500,000行数据。 下面是我正在使用的代码: 期望的行为:第一次出现以另一个艺术家为特征的人会创建关系,并且应该将关系的属性设置为1。对于随后的每一次事件,强度属性将增加1。因此,经常以艺术家B为特色的艺术家A应该具有类似的关系 关系是方向性的,在这种情况下,方向性很重要(A以B为特征不同于B以A为特征)。 在确定问题时,是否有其他有用的信息?