问题标签 [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 投票
0 回答
87 浏览

java - 从其他端点加载内容时如何加速我的应用程序?

我制作了这个应用程序来从各种其他 API 中提取信息。它还没有完成,但到目前为止,AsyncTask 加载的数据对我来说太慢了,有时会跳过 1000 多帧。有什么办法可以加快速度吗?

在旁注中,如果有人可以帮助我从应用程序中新闻标签的网址加载图像,我将不胜感激。

谢谢!

如果您更喜欢直接发布的代码,这是我的仓库: https ://github.com/dayemsaeed/Covid-19

这是我的代码:

代码

MainActivity.java

排序JSONArray.java

StatsFragment.java

CustomListAdapter.java

StatsLoader.java

ViewPageAdapter.java

新闻片段.java

新闻加载器.java

布局

activity_main.xml

list_view.xml

view_page.xml

0 投票
0 回答
67 浏览

java - 主线程要处理多少工作量?关于Android中线程的一些问题

我有 Java 的背景,最近,我正在学习 Android 中的 Java,所以对于像我这样的新手来说,这个问题似乎是压倒性的。无论如何,这里有问题(斜体)。

我使用模板(电话和平板电脑 - 空活动)创建了一个项目,然后使用布局编辑器将 2 个纯文本添加到 GUI。之后,我在MainActivity.java中添加了一些代码(类中没有其他内容)。

当我运行程序时,我收到了这个警告:I/Choreographer: Skipped 31 frames! The application may be doing too much work on its main thread.正如这些链接中显示的答案:应用程序可能在其主线程上做太多工作,而应用程序可能在其主线程上做太多工作。如何修复它。这可能不是一个真正的问题,因为我使用的是模拟器并且代码/资源来自模板,这可能不是最佳的。

然而,究竟是什么决定了这里的“工作量太大”这个词?当我注释掉 中的两行时onBtnClick,警告就消失了。虽然我使用的是模拟器,但findViewById()它相当“重”,足以产生警告。我知道60 fps(每帧 16 毫秒)是标准,但它仍然不能回答我的问题。

此外,有人可以简化现在正在执行的主线程/方法(在我的情况下)吗?我知道mainAndroid 中的类/线程与常规 Java 编程中的不同(如此处所回答

从概念上讲,主线程是否与 UI 线程完全不同(如invokeLater在 Java Swing 中使用)?我猜它是,正如谷歌文档所暗示的那样,“因此,主线程有时也称为 UI 线程。但是,在特殊情况下,应用程序的主线程可能不是它的 UI 线程;有关更多信息,请参阅线程注释。 "


更新

  • (09/30) 对于我遇到的问题,现在我已经阅读了更多关于Activity 生命周期,我开始对下面发生的事情有所了解。但是,我仍在寻找两个斜体问题的答案。
0 投票
1 回答
36 浏览

android - 如何以原子方式使用两个 NotifyDataSetChanged()

总结一下我的问题:

我有一个项目列表和一个单击以查询 API 的按钮

当我单击按钮时,会调用两种方法。第一种方法显示一个进度条,清除列表,并使用notifyDataSetChanged()

第二种方法使用retrofit进行查询,在回调方法中,我隐藏进度条,添加到列表并调用notifyDataSetChanged();

我的问题是当我一个接一个地调用这两个时:

带有改造调用的第二种方法有时会返回一个 IndexOutOfBounds 异常,因为 methodOne() 调用mList.clear()并且mAdapter.notifyDataSetChanged();当我对 mList 进行编辑时。

我的问题是我怎样才能让这两者原子地发生,这样它们就不会相互干扰? (我希望 methodOne() 甚至在查询发生在 methodTwo 之前做所有事情)

0 投票
1 回答
19 浏览

android - RxJava如何创建一个以不同延迟执行多个作业的间隔?

我对 RxJava 很陌生,所以我的问题可能完全是愚蠢的,但我不知道该怎么做。

所以我有N个实现以下接口的工作

我想要实现的是一个类似计时器的功能,每次经过一段时间后都会调用这些Workers函数。job()interval()

到目前为止我尝试过的

这工作正常,在给定时间过去后,作业是异步执行的。

但这只执行了一次。我知道我需要以interval()某种方式使用操作员,但无法理解它。

提前致谢

0 投票
1 回答
127 浏览

android - 在 Handler 线程的队列中添加匿名可运行对象会导致内存泄漏吗?

如果Activity VS ViewModel组件中存在此代码会导致内存泄漏吗?


用扩展 Runnable 的静态类替换匿名可运行类会有什么不同吗?这个视频教程中提到了@4:13 !

为什么匿名的 runnable 会持有对 Activity 或 ViewModel 的引用?

0 投票
1 回答
2802 浏览

android - 如何解决致命异常:DefaultDispatcher-worker-4

我已经编写了一个新用例来与使用 Flow 的 api 进行通信,我猜我没有在主线程和 IO 线程之间的用例中正确处理线程,

这是我得到的错误

错误出现在 .handleStartfilllingClicked(view, it) 中。搜集

我正在调用 startfilllingUseCaseFlow 用例,这可能是问题所在

开始填充用例流

我猜我在这里没有正确处理 IO 和主线程

你能建议我在哪里弄错了吗

谢谢R

0 投票
1 回答
25 浏览

android - 不频繁的 Handler.post 导致大量丢帧和崩溃

我有一个简单的线程来监听 UDP 广播以发现我网络上的设备。每当它接收到广播时,它都会在 UI 线程上发布 aRunnableHandler将设备的 IP 添加到ArrayList. 最多每 2 秒接收一次数据包。我已验证帖子仅每 2 秒发生一次。

我的应用程序也有一些片段。每当我NavController.navigate()在片段之间切换使用时,我都会得到 100-400 帧丢失和 ANR。当我禁用线程,甚至只是禁用搜索重复项并将设备添加到 时ArrayList,帧丢失消失,但搜索和添加时间不到 1 毫秒(根据调试打印)。

我已经阅读了一堆关于问题的其他线程Handlers,但没有一个有帮助。知道为什么我的帖子会导致这么多丢帧吗?

这是线程的运行方法:

以及发布到 UI 线程的 addGeophone 函数:

0 投票
2 回答
528 浏览

android - 使用 Kotlin Coroutines 更新我的 TextView 会导致它崩溃:

在 Kotlin 编程方面,我是个大新手。我对线程有基本的了解。

事情是这样的:单击按钮后,我试图每秒更新一次我的 TextView(在片段内)。我将按钮的 onClick 函数设置为包含 10 个 Coroutine 的 delay(1000) 调用。但我总是得到这个错误:

有什么方法可以在不使用 Kotlin Coroutines 的情况下更新我的 UI 视图?

使用我当前的代码,应用程序在单击按钮 2 秒后崩溃。这是我的代码(如您所见,这很垃圾):

0 投票
1 回答
40 浏览

android - 没有主线程可以存在后台线程吗?

如果我从后台/最近应用程序列表中删除应用程序,UI 线程也会停止,以便系统可以回收与 UI 关联的内存。现在考虑一个触发 PeriodicWorkRequest 的情况,它反过来启动一个工作人员(在应用程序从后台/最近的应用程序列表中删除之后)。worker 隐式运行在单独的后台线程上,并正在执行分配的任务。但是 UI/Main 线程是否也与工作线程一起创建?

应用程序可以在没有活动的情况下存在。它可以有其他组件,如服务等,没有 UI。在这种情况下,UI/Main 线程是否仍然存在?

或者在任何其他情况下,是否可以存在没有 UI/主线程的进程,只有一个工作线程?

0 投票
0 回答
169 浏览

java - Android 服务未通知它已启动且 UI 间歇性锁定

我间歇性地遇到问题,似乎当 UI 锁定时服务通知没有弹出,但是服务正在运行。我认为这是一个线程问题锁定我已经设法抓住了崩溃的一小部分,但将不得不等待另一个尝试抓住整个日志。错误是:

我的服务如下,有相当多的代码未使用或不相关,但我认为共享整个文件是明智的,我在后台线程中启动服务,或者我认为但现在已经确认它实际上是在 main 中运行,但是 UI 并不总是被阻止?

希望有人可以告诉我线程是否正确并阐明所遇到的问题