如果没有完成,我创建1分钟延迟计时器来关闭服务.看起来像这样:
private Handler timeoutHandler = new Handler();
Run Code Online (Sandbox Code Playgroud)
在onCreate()里面
timeoutHandler.postDelayed(new Runnable()
{
public void run()
{
Log.d(LOG_TAG, "timeoutHandler:run");
DBLog.InsertMessage(getApplicationContext(), "Unable to get fix in 1 minute");
finalizeService();
}
}, 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
如果我在这1分钟之前完成工作 - 我想取消这个延迟的事情但不确定如何.
我想知道我们是否有可能postDelayed在android上处理/检测带有延迟(方法)的可运行回调?
例如,handler.postDelayed(new Runnable()...我的应用程序(用于测试目的的应用程序)有一个或几个splashscreen(运行).在这个应用程序中,我还有一个库(我正在应用程序中创建和使用它)以及一些在类上运行的IntentService类.
有时,当应用程序运行那些splashscreenActivities(for Testing purpose)时,我正在创建的库可能会在UI中自动弹出一些活动.但似乎如果这些活动出现在splashscreen活动上并且splashscreen正在被销毁,那些活动(自动弹出)也将被销毁并在logcat中记录"泄露的窗口"消息.
问题是:
所以我的问题是(相对于我正在创建的库方面而没有UI应用程序流的信息):
PS:请注意,通常情况下,我正在使用自动出现的假设活动的对话框.
UPDATE
图解说明:
现在我有一个正在执行Splashscreen的案例.
扩展IntentService类的类已收到来自Internet的请求,该请求将启动一个Activity.
同时启动了启动画面postdelayed,其他活动已创建并在UI中显示.当X秒已经过去且另一个Activity未被销毁时,将创建Next Activity并自动销毁另一个Activity.在这样做时,Android会相对于Activity抛出"泄露的窗口"消息.
java android android-activity android-handler android-looper
我想知道Handler中removeCallbacks(Runnable r)的确切含义是什么.我浏览了它的文档,它只是说"删除消息队列中任何待处理的Runnable r的帖子".
现在我的问题是我的消息是否已经由我的处理程序开始处理,如果我打电话removeCallbacks,它会停止处理我完成的一半消息吗?或者即使我调用removeCallbacks已经开始由我的处理程序处理的消息(当我调用时post(Runnable r))将被执行?
我有一些活动,其中一些Handlers正在以不超过5分钟的间隔执行.活动从a启动BroadcastReceiver并可以在屏幕关闭时启动等待用户抓取电话并获取用户输入,当发生这种情况时,onPause()调用活动以确保CPU处于睡眠模式.我没有将活动设置为打开屏幕,因为我想尽可能多地保存电池.
我已经用我的手机对它进行了测试并且工作得很好,而屏幕关闭时都会Handlers执行所有必须运行的代码.如果我在活动打开时打开和关闭屏幕,一切正常.
现在,我已经到处读到,当屏幕关闭且CPU休眠时,某些设备无法按预期工作,大多数时候都使用加速度计.现在我的问题是,我是否需要获取一个WakeLock所以当我的活动打开时CPU不会睡觉?我真的想知道这一点,因为正如我之前所说,我不想通过购买昂贵的东西来"浪费"电池WakeLock.
我更喜欢一个真正了解其工作原理的人的详细答案.
performance android battery android-wake-lock android-handler
在android中,Handler可用于发布/处理消息,如果我不使用HandlerThread(将其Looper传递给Handler),这是否意味着在这种情况下Handler使用MainThread(UI Thread)的Looper?
如果Handler使用MainThread的Looper会得到什么结果?可能导致mainThread被阻止?
我看到这个例子,我想知道是否有任何客观原因使用 Coroutinesdelay而不是 Android Handler 来实现这个postDelayed?
如果链接失效,示例代码如下:
val watcher = object :TextWatcher{
private var searchFor = ""
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val searchText = s.toString().trim()
if (searchText == searchFor)
return
searchFor = searchText
launch {
delay(300) //debounce timeOut
if (searchText != searchFor)
return@launch
// do our magic here
}
}
override fun afterTextChanged(s: Editable?) = Unit
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现,AsyncQueryHandler因为我在此链接中遇到了同样的问题,但我没有看到任何关于实现它的示例或任何内容.
我试过了
AsyncQueryHandler handler = new AsyncQueryHandler(getContentResolver());
Run Code Online (Sandbox Code Playgroud)
因为这是构造函数在文档中显示的内容,但我得到一个错误cannot instantiate the type AsyncQueryHandler,说明如何使用它呢?
有人可以解释为什么Handlers发布了一个可运行的?重写handleMessage和发送消息是否也做同样的事情?
我写了一些未经测试的代码来说明我认为这两种方法的实现方式.如果我的方法错了,请纠正我.
邮政处理程序:
handler.post(new Runnable() {
@Override
public void run() {
imageView.doSomething();
}
});
Run Code Online (Sandbox Code Playgroud)
handleMessage处理程序:
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
imageView.doSomething();
}
};
handler.sendMessage(message);
Run Code Online (Sandbox Code Playgroud) 我已经看过很多如何做到这一点的例子,但我无法想象如何在我的代码中实现它.
我用这个代码.
我已经更新了url,因此它会收到一个包含动态数据的json.我要做的是使用此代码每30秒自动更新一次列表.
Handler handler = new Handler();
Runnable refresh = new Runnable() {
public void run() {
new GetContacts().execute();
handler.postDelayed(refresh, 30000);
}
};
Run Code Online (Sandbox Code Playgroud)
它刷新,并调用url并获取数据,但UI不会更新.
感谢任何有助于我朝着正确方向前进的提示.
http://www.androidhive.info/2012/01/android-json-parsing-tutorial/
根据以下文件Handler.postDelayed(Runnable r, long delayMillis):
导致Runnable r被添加到消息队列中,在指定的时间量过去之后运行.runnable将在连接此处理程序的线程上运行.
另一方面View.postDelayed(Runnable action, long delayMillis):
导致Runnable被添加到消息队列,以便在指定的时间量过去后运行.runnable将在用户界面线程上运行.
我想知道在从主线程调用它们时两者之间是否存在差异,特别是,如果活动被销毁时存在差异?
我已经阅读了这篇文章,关于当我使用内部类处理程序时如何泄漏Activity,我想知道使用是否View.postDelayed()会导致同样的问题.
例如,foo()可能导致问题,还是活动的破坏会解决Runnable匿名类持有对活动的引用这一事实?
public class MyActiviy extends Activity {
private void foo(View v) {
v.postDelayed(new Runnable() {
public void run() {
// some delayed work
}
}, 60000);
finish();
}
}
Run Code Online (Sandbox Code Playgroud)