问题标签 [android-threading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
33563 浏览

android - Difference between AsyncTask and Thread/Runnable

I have question which puzzles me.

Imagine I wanna do something in another thread, like fetching GPS/Location stuff, which as recommended in the SDK documents, must use a background thread.

So here is the question: What's the difference between

  1. Creating a Thread in background via AsyncTask AND

  2. Creating Thread thread1 = new Thread(new Runnable() ... and implementing run()?

0 投票
0 回答
32 浏览

android - 为什么一个新线程可以触摸视图

正如我们在 Android 应用程序中所知道的那样,我们可以仅从以下消息中触摸视图Main/UI Thread,否则CalledFromWrongThreadException会抛出以下消息:

但是当我在 处仅触摸 1 次时onCreate(),此异常不会抛出并且“Hello Again!” 开始TextView

你知道为什么吗?

0 投票
2 回答
30 浏览

android - 如果我在本地存储和检索数据,是否需要后台线程?

我正在构建一个简单的任务列表应用程序,它使用 Gson 库从共享首选项中存储和检索任务。在这一点上,没有任何明显的延迟或故障,所以我想知道它是否有必要或在某些时候可能变得有必要。例如,如果我决定切换到另一个本地数据源,如 SQLite 或 Room,是否有必要?

0 投票
1 回答
29 浏览

android - 处理程序错误同时进行多个进程

我正在创建可以同时运行 2 个进程的应用程序(保存到数据库/发送到 api)但是,我遇到了我的问题。这是我的线程代码:

这是我的代码:

这是我遇到的错误:

在此处输入图像描述

PS。我想知道我的代码完全无法工作,尽管我还希望使用这个代码实现其他可能的代码实现,例如 asynctask 与这个多进程一起工作 + 在单个肉类中使用线程。

0 投票
4 回答
571 浏览

android - 如何在一定时间后显示 ProgressBar

我正在使用 Android API 级别 23 (Android 6)。我正在使用 com.loopj.android.http.AsyncHttpClient 来实现与我的后端服务器的异步通信,它工作正常。

在与服务器通信时,我显示了一个进度条,如下所示:

并像这样隐藏它:

按照此处的建议完成后。

它工作得非常好。

现在大多数时候,对服务器的请求只需要几毫秒,因此显示和隐藏进度条会导致一些闪烁,如果请求时间很短,这是不必要的和烦人的。

什么是仅在请求开始后一定时间后才显示进度条的好方法,比如说在一秒钟后?

0 投票
1 回答
47 浏览

android - 将 ImageView 的可见性连接到 MediaPlayer 状态的最佳方法?

我正在开发一个项目,其中 ImageView 元素应该只在 MediaPlayer 对象播放时可见。

MediaPlayer 的状态可以随时更改。

连接这个的最好方法是什么?我考虑过在后台运行一个线程,但对于这么小的东西来说似乎有点沉重。

这是线程的当前代码,应用程序运行,但图像不显示。

0 投票
0 回答
39 浏览

android - 创建 TCP 连接时线程停止

我正在构建一个通过线程启动连接的应用程序,但是当我初始化连接时,应用程序没有连接并停止(它继续工作但它什么都不做)。1 周前它确实可以正常工作,但是当我更新 Android Studio 时,它开始导致我出现这个问题。

这是 Connection 的抽象类:

在进行一些调试时,我发现在实例化套接字时它显然会阻塞。

0 投票
0 回答
147 浏览

android - 如何在 Android 中优化后台任务

我有一个应用程序需要每分钟从房间数据库(基本上是 SQLite 的包装器)中获取数据来检查这些数据。

我已经用 Handler 实现了每分钟触发这个异步调用。处理程序在 mainThread 上注册,但是当调用任务时,它会分派一个新线程以在后台运行此任务。

我的问题是,当应用程序不在前台时,不需要进行此操作。理想情况下,当应用程序返回前台时,处理程序会触发任务,并且在该任务完成后,它应该在 1 分钟内安排下一次调用。

但是当我通过单击主页按钮离开我的应用程序,打开其他应用程序时,我仍然看到我的应用程序正在制作有关此操作的日志。

我的问题是,如果让它运行 6 或 7 个小时,恐怕会对用户手机造成电池影响。App中没有唤醒锁。

编辑:有 3 个活动使用这个类,这个(BackcgroundExecutor)是单例的内部类。如果我将它连接到一个生命周期,我将不得不根据所有 3 个生命周期使其正常工作。

你会如何解决这个问题?

0 投票
2 回答
304 浏览

android - MainLooper 未执行 Android Runnable

应用简要说明:

  • 我有用于本地代码执行的 Cordova/Ionic 应用程序和自定义 Cordova 插件。
  • 插件包含单独的 CameraActivity(扩展 FragmentActivity)以使用 Camera(部分代码基于 Camera2Basic 示例)。
  • 启动时 Activity 显示 AnaliseFragment,应用程序在其中捕获每个 Camera 帧并将图像传递给后台线程上的分析器。

执行步骤为:

  1. 用户按下 Cordova UI 上的按钮
  2. Cordova 通过 cordova.exec(..) 执行本机插件方法
  3. 本机插件通过 cordova.startActivityForResult(..) 启动 CameraActivity 以获得结果
  4. CameraActivity 显示 AnaliseFragment
  5. AnaliseFragment 使用两个表面启动相机捕获会话:第一个显示在 TextureView 上,第二个由 ImageAnaliser 分析

问题:

UI 很少且随机地停止对用户和未在 UI 线程上执行的可运行对象做出反应。与此同时,后台线程继续正常工作:在 TextureView 上可以看到相机输出,并且 ImageAnaliser 继续从相机接收图像。

有没有人有任何建议如何找到/调试这种行为的原因?或者有什么想法会导致这种情况?

我已经尝试过:

  • 记录 CameraActivity/AnaliseFragment 的每个生命周期事件 = 应用正常状态和 ANR 之间没有调用
  • 添加 WAKELOCK 以保持 Cordova MainActivity 活动 = 没有帮助
  • 记录(跟踪) AnalilseFragment 和 ImageAnaliser 中的每个方法 = 没什么可疑的

下面是 AnaliseFragment 的简化代码:

ImageAnalyser 的简化代码:

0 投票
1 回答
51 浏览

android - 在 doInBackground() 中访问视图是不好的做法吗?

将 UI 元素(例如 a TextView、 )传递给AsyncTask.doInBackground()(通过AsyncTask.execute())并从后台线程中的视图中读取字段是不好的做法吗?(我知道从后台线程更改 GUI 元素是不行的。)