我正在开发一个Android应用程序,有一个不断重复的后台进程。
从设备启动的那一刻起,它应该每分钟加载一个网页上的数据。它使用XmlPullParser和一个简单的URL InputStream。它只有10KB,所以没有那么密集。我相信这种任务叫做延期。一旦用户打开应用程序,流程加载的信息必须可以访问活动。后台进程也需要设置,以便在数据显示某些结果时发出通知。
在Android中似乎有多种方法来实现这一点,例如。然而,JobScheduler、WorkManager或AlarmManager,到目前为止我所尝试的一切似乎要么在活动关闭后停止,要么根本不运行。时间,每分钟,似乎也是一个问题,因为重复的工作和工人的最小间隔是15。这一分钟不一定要精确。我认为,与其让一个重复的进程加载数据,不如让一个长时间运行的进程在加载数据之间Hibernate1m。
使用workmanager
很容易,这是在Android中安排重复后台工作的最受欢迎的方式,请参见导言。
正如你所说,重复工作请求的最小间隔被限制在15分钟内,打破这一间隔的唯一方法是重复安排一次性工作。
1.设置员工类:
class ToastShower(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
withContext(Dispatchers.Main) { //ui related work must run in Main thread!!
Toast.makeText(applicationContext, "Hey, I'm Sam! This message will appear every 5 seconds.", Toast.LENGTH_SHORT).show()
}
return Result.success()
}
}
class WorkManagerApplication : Application() {
private val backgroundScope = CoroutineScope(Dispatchers.Default) //standard background thread
private val applicationContext = this
override fun onCreate() { //called when the app launches (same as Activity)
super.onCreate()
initWork()
}
private fun initWork() {
backgroundScope.launch { //all rnu in background thread
setupToastShowingWork(0) //no delay at first time
observeToastShowingWork() //observe work state changes, see below
}
}
private fun setupToastShowingWork(delayInSeconds: Long) { //must run in background thread
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED) //when using WiFi
.build()
val oneTimeRequest = OneTimeWorkRequestBuilder<ToastShower>() //【for breaking 15 minutes limit we have to use one time request】
.setInitialDelay(delayInSeconds, TimeUnit.SECONDS) //customizable delay (interval) time
.setConstraints(constraints)
.build()
WorkManager.getInstance(applicationContext).enqueueUniqueWork( //【must be unique!!】
ToastShower::class.java.simpleName, //work name, use class name for convenient
ExistingWorkPolicy.KEEP, //if new work comes in with same name, discard the new one
oneTimeRequest
)
}
private suspend fun observeToastShowingWork() {
withContext(Dispatchers.Main) { //must run in Main thread for using observeForever
WorkManager.getInstance(applicationContext).getWorkInfosForUniqueWorkLiveData(ToastShower::class.java.simpleName).observeForever {
if (it[0].state == WorkInfo.State.SUCCEEDED) { //when the work is done
backgroundScope.launch { //prevent from running in Main thread
setupToastShowingWork(5) //every 5 seconds
}
}
}
}
}
}
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.workmanagertest">
<application
android:name=".WorkManagerApplication" //【here, must!!!】
...
</application>
</manifest>
我正在尝试执行某些操作,例如创建一个表,并在应用程序的初始启动时插入720行,这需要一些时间,所以我决定在后台运行它。请参见下面的代码, 主要活动。Java语言 当我运行它时,它显示logcat中的以下错误, 请帮忙! 仅供参考:整个Logcat
我试着在网络视图中查看http://artikelweb.com。网页显示得很好。但是,每当我从“热门作者”部分转到任何作者链接时,网页都会出现,但是加载后,报价没有显示。 在Google Chrome浏览器(移动)中,加载后会出现引号, 但是,在我的应用程序中,引用不会显示在网络视图中。 代码片段:
我最初的fxml(例如)有很多功能,因此完全加载需要大量时间。因此,为了避免程序启动和fxml加载之间的时间间隔,我引入了另外一个fxml()和一个gif图像,该图像应该在加载主fxml时出现。问题是我的加载器中的gif图像。fxml不会移动,就像程序中的挂起一样,直到home.fxml被完全加载。为了避免这种情况,我将home.fxml加载移到一个线程中,如下代码所示。 但是在这段代码之后,我的
我正在努力实施这篇文章中给出的建议。 不幸的是,我不清楚步骤。我尝试实施这些建议,但后台时间剩余继续减少,即使我开始和停止位置服务。我是这样开发它的: InitTimer: 检查更新: 有人对我的代码中可能出现的错误有什么建议吗?正在调用initTimer和checkUpdates,但仅在后台执行时间(-10分钟)期间调用。我希望应用程序“永远”每隔n分钟更新一次位置。 我的应用程序的UIBack
我的图像是从网络连接加载的。 我有3个图像,希望在一个ImageView中每2秒更改一次。 例如,图像1 - 当前,我的代码如下:
问题内容: 我编写了一个CMS,其中记录了谁最近登录了系统。目前,此数据通过Ajax馈入jQuery UI选项卡。我想将此信息放入主页的侧边栏中,并每30秒(或一定时间)通过AJAX加载。 我将如何去做?PHP响应是否需要JSON编码?我对AJAX和JSON数据还很陌生。 这是我目前用于从用户表中提取详细信息的PHP- 谢谢! 更新 好的,这就是我到目前为止所拥有的..我所坚持的部分是如何遍历JS