标签: android-handler

如何在Android代码中取消处理程序?

如果没有完成,我创建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分钟之前完成工作 - 我想取消这个延迟的事情但不确定如何.

android android-handler

20
推荐指数
3
解决办法
2万
查看次数

为什么可运行的回调会自动销毁活动?

我想知道我们是否有可能postDelayed在android上处理/检测带有延迟(方法)的可运行回调?

例如,handler.postDelayed(new Runnable()...我的应用程序(用于测试目的的应用程序)有一个或几个splashscreen(运行).在这个应用程序中,我还有一个库(我正在应用程序中创建和使用它)以及一些在类上运行的IntentService类.

有时,当应用程序运行那些splashscreenActivities(for Testing purpose)时,我正在创建的库可能会在UI中自动弹出一些活动.但似乎如果这些活动出现在splashscreen活动上并且splashscreen正在被销毁,那些活动(自动弹出)也将被销毁并在logcat中记录"泄露的窗口"消息.

问题是:

  • 不应自动关闭UI中自动显示的那些活动,这是禁止的.它需要用户进行交互以关闭该活动并返回应用程序的正常行为.
  • 此外,该库对应用程序的UI一无所知.

所以我的问题是(相对于我正在创建的库方面而没有UI应用程序流的信息):

  • 有没有办法检测是否在相对于库方面的应用程序中创建了一些postDelayed方法?如果是,我该如何处理这个问题呢?

PS:请注意,通常情况下,我正在使用自动出现的假设活动的对话框.

UPDATE

图

图解说明:

现在我有一个正在执行Splashscreen的案例.

扩展IntentService类的类已收到来自Internet的请求,该请求将启动一个Activity.

同时启动了启动画面postdelayed,其他活动已创建并在UI中显示.当X秒已经过去且另一个Activity未被销毁时,将创建Next Activity并自动销毁另一个Activity.在这样做时,Android会相对于Activity抛出"泄露的窗口"消息.

java android android-activity android-handler android-looper

17
推荐指数
1
解决办法
624
查看次数

Android中的Handler中removeCallbacks(Runnable r)的含义是什么?

我想知道Handler中removeCallbacks(Runnable r)的确切含义是什么.我浏览了它的文档,它只是说"删除消息队列中任何待处理的Runnable r的帖子".

现在我的问题是我的消息是否已经由我的处理程序开始处理,如果我打电话removeCallbacks,它会停止处理我完成的一半消息吗?或者即使我调用removeCallbacks已经开始由我的处理程序处理的消息(当我调用时post(Runnable r))将被执行?

android android-handler

16
推荐指数
2
解决办法
1万
查看次数

当CPU休眠时,Handler post会不会被解雇?

我有一些活动,其中一些Handlers正在以不超过5分钟的间隔执行.活动从a启动BroadcastReceiver并可以在屏幕关闭时启动等待用户抓取电话并获取用户输入,当发生这种情况时,onPause()调用活动以确保CPU处于睡眠模式.我没有将活动设置为打开屏幕,因为我想尽可能多地保存电池.

我已经用我的手机对它进行了测试并且工作得很好,而屏幕关闭时都会Handlers执行所有必须运行的代码.如果我在活动打开时打开和关闭屏幕,一切正常.

现在,我已经到处读到,当屏幕关闭且CPU休眠时,某些设备无法按预期工作,大多数时候都使用加速度计.现在我的问题是,我是否需要获取一个WakeLock所以当我的活动打开时CPU不会睡觉?我真的想知道这一点,因为正如我之前所说,我不想通过购买昂贵的东西来"浪费"电池WakeLock.

我更喜欢一个真正了解其工作原理的人的详细答案.

performance android battery android-wake-lock android-handler

16
推荐指数
1
解决办法
1万
查看次数

为什么在Android中使用HandlerThread

在android中,Handler可用于发布/处理消息,如果我不使用HandlerThread(将其Looper传递给Handler),这是否意味着在这种情况下Handler使用MainThread(UI Thread)的Looper?

如果Handler使用MainThread的Looper会得到什么结果?可能导致mainThread被阻止?

android android-handler android-handlerthread

15
推荐指数
4
解决办法
1万
查看次数

Android postDelayed 与 Coroutines 延迟

我看到这个例子,我想知道是否有任何客观原因使用 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)

android kotlin android-handler kotlin-coroutines

15
推荐指数
1
解决办法
1万
查看次数

实现AsyncQueryHandler

我正在尝试实现,AsyncQueryHandler因为我在此链接中遇到了同样的问题,但我没有看到任何关于实现它的示例或任何内容.

我试过了

AsyncQueryHandler handler = new AsyncQueryHandler(getContentResolver());
Run Code Online (Sandbox Code Playgroud)

因为这是构造函数在文档中显示的内容,但我得到一个错误cannot instantiate the type AsyncQueryHandler,说明如何使用它呢?

android android-handler

14
推荐指数
3
解决办法
1万
查看次数

Android:为什么Handlers发布了runnable?

有人可以解释为什么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)

android android-handler

14
推荐指数
1
解决办法
8491
查看次数

如何从asynctask更新ui

我已经看过很多如何做到这一点的例子,但我无法想象如何在我的代码中实现它.

我用这个代码.
我已经更新了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/

android android-asynctask android-handler android-json

14
推荐指数
2
解决办法
4万
查看次数

主线程上的View.postDelayed()和Handler.postDelayed()有什么区别?

根据以下文件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)

java multithreading android android-handler

13
推荐指数
1
解决办法
4321
查看次数