- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 android.os.Handler 的“postDelayed”方法打开和关闭继电器。有 2 个可运行的 - 一个用于发送 ON 命令,另一个用于发送 OFF 命令。继电器需要保持固定 ms 并再次关闭固定 ms。
我提到了这个旧的 android 帖子 http://android-developers.blogspot.in/2007/11/stitch-in-time.html向中继发送重复命令
启动命令需要从不同的设备同时发送——每个连接到不同的继电器。所以效果应该是所有的继电器应该同时打开。
我确保命令从每台设备同时发送,在所有设备上使用 GPS 时间同步。一旦所有设备都同步了 GPS 时间,我第一次在秒开始时发送 ON 命令,然后将固定延迟添加到两个可运行对象的 postDelay 方法中。
我仍然注意到继电器在第一次时并没有同时打开。我注意到最多延迟 1 秒。
我需要知道“postDelayed”方法的可靠性如何?我可以相信它的精度高达 5 毫秒吗?有没有更可靠的方法以固定延迟发送重复命令?
部分代码
public class RelayAsyncTask extends AsyncTask<Void, Integer, Boolean>
{
private Activity context = null;
private Handler handler = null;
private Runnable offRunnable,onRunnable;
@Override
protected void onPreExecute()
{
handler = new Handler();
onRunnable = new Runnable() {
@Override
public void run() {
new RelayTurnOnAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
publishProgress(1); // used to display on UI that a command has been sent
handler.postDelayed(offRunnable, 500);
}
};
offRunnable = new Runnable() {
@Override
public void run() {
new RelayTurnOffAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
publishProgress(2); // used to display on UI that a command has been sent
handler.postDelayed(onRunnable, 1000);
}
};
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
try {
// Code to calculate diff when first ON command should be sent
.
.
handler.postDelayed(onRunnable, diff);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
switch (values[0]) {
case 0:
{
break;
}
case 1:
{ //code to update UI
.
.
break;
}
case 2:
{ //code to update UI
. .
.
break;
}
default:
break;
}
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
}
}
我还注意到在调用 RelayTurnOnAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null) 时延迟长达 10 毫秒。
最佳答案
尝试在没有 asynctask 的情况下直接执行它。
我的意思是,如果您在 doInBackground
中所做的只是调用 postDelayed
,那么您可以直接在 UI 线程和内部处理程序 runnable 上执行,而不是 publishProgress
直接设置进度。
关于Android postDelayed方法可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25030595/
我正在尝试为一个应用程序循环播放一个简短的动画,我在许多网站和论坛中找到了这个解决方案或其中的几个。然而,首席开发人员告诉我这段代码最终会使应用程序崩溃,我应该改用线程。谁能详细解释一下为什么这段代码
根据Handler.postDelayed(Runnable r, long delayMillis)的文档: Causes the Runnable r to be added to the mes
我试图实现一个循环Runnable。我发现的示例似乎使用以下想法来启动可运行的。 handler = new Handler(); final Runnable r =
对于这种使用“handler.posDelayed”的类型,我没有看到真正的答案。 因此,我使用 for 循环多次执行“handler.posDelayed”。问题是,当我离开 Activity 并重
我遇到错误:无法解析符号“postDelayed”。在: handler.postDelayed(updateCurrentTime, 500); 这是我的一些代码: package com.exam
我有一个情况,我创建了一个按钮和一个像这样的函数。 ... public void BtnOnClick(View view) { displayMsg(); } ... private vo
如何将用户字符串拉入处理程序timer.postDelayed? public class Quotes extends Activity implements OnClickListener {
我需要的是当 competition.isTimerStarted 变成 false 这个 runnable 应该启动 buttonsProcedure() 一次然后自己停止但这并没有发生 - but
谁能看出这不起作用的任何原因? override fun resetAnimations() { Log.d("MainActivity", "start") Handler().p
我正在查看 postDelayed 的 Android 文档 post delayed documentation 这类似于另一个问题 - https://stackoverflow.com/ques
我正在尝试在一段时间后自行重启服务。我的代码看起来像这样(在 onStartCommand(...) 内) Looper.prepare(); Handler handler = new Handle
我正在尝试为我的应用制作启动画面。我使用了 postDelayed 方法。这是我的代码: public class SplashScreenActivity extends Activity {
我正在使用 handler.postDelayed 方法为某些动画内容创建一些延迟。 我正在使用 Mediaplayer 播放一些歌曲。用户可以通过单击下一步退出此操作类。但是在下一个屏幕上,即使我在
我正在使用此代码播放声音 final MediaPlayer mp = MediaPlayer.create(this, R.raw.sound); mp.setOnComp
我正在尝试更改 handler.postDelay() 中处理程序的延迟,但在这里它只工作一次然后停止。关键的方法在最后。我在想如何使可运行程序在 postDelay() 循环中工作。 class M
我有一个简单的秒表代码 fragment 。线程在自定义类中运行,它通过接口(interface)连接到主 Activity public class MainActivity extends App
在我的应用程序中,我使用具有多个可运行对象的处理程序。为了调用这些可运行对象,我循环 postDelayed,以便它们充当计时器。我意识到随着时间的推移,这会生成一个巨大的堆(10mb,并且还在不断增
我有一个监听蓝牙串行数据的线程。 我有一个将数据传递到 ui 线程的方法,名为:sendData(byte[] buffer),它将数据完美地发送到 UI 线程,这可能会导致它在以下情况下变得非常慢:
这是我的代码,但理论上它应该每秒发布此日志消息直到永远,但事实并非如此。有任何想法吗?我的目标是让它永远运行,但 while 循环也不起作用。 import android.app.Activity;
我想为 WebView 动态设置自动滚动速度。在 onCreate 中调用 autoScroll(25) 并将其删除,接下来调用 autoScroll(300) 但是当 apk 运行时自动滚动速度为
我是一名优秀的程序员,十分优秀!