标签: android-handler

我应该使用AlarmManager还是Handler?

我正在编写一个不断轮询设备传感器的应用程序,并且经常会将一些统计信息记录到文件中.这可能是每秒一次或每分钟一次慢.我应该使用Handler's postDelayed()方法还是只安排它AlarmManager

android alarmmanager android-handler

13
推荐指数
4
解决办法
7727
查看次数

为什么使用Messenger而不是将引用传递给Handler?

我有一个主要的活动和约束服务.绑定服务从网络接收命令,该命令触发将消息发送到主活动中的处理程序.通过传递Handler对服务的引用,我得到了一切.然后......我偶然发现了一个叫做Messenger的东西.

Messenger:引用Handler,其他人可以使用它向其发送消息.这允许跨进程实现基于消息的通信,方法是在一个进程中创建指向Handler的Messenger,并将该Messenger交给另一个进程.

这引发了一些问题:

  • 术语过程是否意味着我不需要使用Messenger,除非我根据Process和Thread 指南生成一个单独的过程?
  • 使用Messenger总是好的做法吗?
  • 通过对Handler的引用通常是个坏主意吗?

android android-service android-handler

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

在死线程Google Admob Rewarded视频上向处理程序发送消息

在完成整个视频后,我从Google Admob的奖励视频屏幕回到我的活动时得到了这个堆栈跟踪.它只是警告,而不是崩溃. onRewardedVideoAdClosed()观看视频后调用方法,但onRewarded()不调用.任何帮助?

  Handler (android.os.Handler) {5451758} sending message to a Handler on a dead thread
    06-06 09:29:00.378: W/MessageQueue(10743): java.lang.IllegalStateException: Handler (android.os.Handler) {5451758} sending message to a Handler on a dead thread
    06-06 09:29:00.378: W/MessageQueue(10743):  at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
    06-06 09:29:00.378: W/MessageQueue(10743):  at android.os.Handler.enqueueMessage(Handler.java:631)
    06-06 09:29:00.378: W/MessageQueue(10743):  at android.os.Handler.sendMessageAtTime(Handler.java:600)
    06-06 09:29:00.378: W/MessageQueue(10743):  at android.os.Handler.sendMessageDelayed(Handler.java:570)
    06-06 09:29:00.378: W/MessageQueue(10743):  at android.os.Handler.sendEmptyMessageDelayed(Handler.java:534)
    06-06 09:29:00.378: W/MessageQueue(10743):  at android.os.Handler.sendEmptyMessage(Handler.java:519)
    06-06 09:29:00.378: W/MessageQueue(10743):  at jm.c(:com.google.android.gms.DynamiteModulesA:2142)
    06-06 09:29:00.378: W/MessageQueue(10743):  at ahf.f(:com.google.android.gms.DynamiteModulesA:638)
    06-06 09:29:00.378: W/MessageQueue(10743):  at avj.b(:com.google.android.gms.DynamiteModulesA:1343)
    06-06 …
Run Code Online (Sandbox Code Playgroud)

android admob android-handler

11
推荐指数
1
解决办法
1217
查看次数

缺少Android Studio中的android.os.handler对象

我正在尝试在我的应用程序中创建一个Handler线程,但Android Studio将我的文本标记为红色,并且只会尝试导入处理程序的java.util版本而不是Android SDK版本.当尝试手动导入时,我能够很好地找到HandlerThread但是正常的处理程序导入似乎缺失了.

有什么想法吗?

import android android-handler android-studio

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

我如何每10秒调用一次功能?

我想制作一个应用程序,例如每隔10秒调用一个函数.

我写了这样的代码:

Handler ha=new Handler();
ha.postDelayed(new Runnable() {
    @Override
    public void run() {
        //call function

    }
}, 10000); 
Run Code Online (Sandbox Code Playgroud)

但是编译完这段代码后,我的函数在10秒内调用了一次.

我该如何解决?

android android-handler

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

谷歌地图api ANDROID中标记的GIF类型动画

我想实现一个标记动画,如GIF动画.我有两个应该同时闪烁的图像.我发现在android中没有任何可以实现这一点的东西.我想做的是,创建一个每1秒运行一次的处理程序,我正在尝试为标记设置图标.但它不起作用.请指导我正确的方向.

我现在的代码如下.

  Handler handler = new Handler();
  Boolean marker_color_bool = true;

//adding marker and sending the marker instance to marker_animation() method where handler is called.

MarkerOptions marker = new MarkerOptions()
                .title(delivery_center_name)
                .snippet("This is the " + delivery_center_name + " location")
                .position(location)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.red_marker));

        google_map.addMarker(marker);

        marker_animation(marker);
Run Code Online (Sandbox Code Playgroud)

marker_animation()方法

 private final int ONE_SECONDS = 1000;
public void marker_animation(final MarkerOptions marker ) {

    handler.postDelayed(new Runnable() {
        public void run() {

            Log.e("running",""+marker_color_bool);

            if(marker_color_bool == true)
            {

                marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.green_marker));
                marker_color_bool = false;
            }
            else
            {
                marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.red_marker));
                marker_color_bool = …
Run Code Online (Sandbox Code Playgroud)

android google-maps google-maps-markers android-handler google-maps-android-api-2

10
推荐指数
1
解决办法
3237
查看次数

Android AsyncTask vs Thread + Handler vs rxjava

我知道这是多次被问到的问题.然而,有些东西我从来没有找到答案.所以希望有人能给我一些启示.

我们都知道AsyncTask和Thread是执行后台任务以避免ANR问题的选项.建议asynctask只应用于短期运行任务,而线程可用于长时间运行的任务.asynctask不应该用于长任务的原因众所周知,这是因为asynctask可能导致泄漏,因为它可能会在活动被破坏后继续运行.这是令人信服的.但是,它还会导致一些其他问题:

  1. 线程是否也独立于活动生命周期?因此,asynctask的风险也可以应用于线程.那么为什么线程适合长时间运行的任务呢?
  2. 看起来asynctask的风险仅适用于与活动一起使用时.如果我们在服务中使用它(不是IntentService,因为IntentService在其工作完成后停止),并且只要我们可以保证在服务停止时取消asyntask,我们可以将它用于长期运行的任务吗?并不意味着它可以在服务中使用asynctask吗?
  3. 我和rxjava玩了一段时间,真的很喜欢它.它消除了担心线程(除非你必须决定哪个线程订阅和观察所发出的数据)的需要.从我所看到的,rxjava(与其他一些lib一起,比如改造)似乎是asynctask和thread的完美替代品.我想知道我们是否可以完全忘记它们,或者有任何特定的情况,rxjava无法实现asynctask和线程可以做的那些我应该知道的?

谢谢

multithreading android android-asynctask android-handler rx-java

10
推荐指数
1
解决办法
2057
查看次数

我应该在销毁活动时手动关闭由我的应用程序创建的HandlerThreads吗?

我的应用程序由一个单独组成Activity.在这个活动中,我正在创建多个HandlerThreads,它们在循环中运行以执行套接字阻塞操作.

目前我HandlerThread在我的期间向这些人发布了一条戒烟信息Activity.onDestroy().

有时,当我打开我的应用程序,关闭它并重新启动它时,它会崩溃(很多时候是由于向未运行的处理程序线程发送消息).

我的问题是:关闭我的应用程序时关闭的正确方法HandlerThread什么(请注意,那些线程可能在套接字操作上阻塞).

编辑:更多信息: 我有一个处理程序线程池,它是在onCreate中启动的(当我第一次启动我的应用程序时没问题).

每个处理程序runnable循环都包含一个

 if (shouldRun) {
//body
} 
else { 
 close();
}
Run Code Online (Sandbox Code Playgroud)

声明.

close方法删除所有挂起的消息和runnables,并向处理程序发送一条消息,使其调用它looper.quit().这样,如果当前处理程序线程被IO操作阻止,只有一旦它完成它,他将退出().

android activity-lifecycle android-handler

9
推荐指数
1
解决办法
8388
查看次数

为什么在LoaderManager中使用AsyncTaskLoader而不是简单的Handler?

从UI线程运行异步任务然后修改UI是android开发中的常见问题,因此我决定花一些时间,研究并使用不同的技术,找到最适合我的方法.

我认为重要的因素是:

  • 应该可靠地工作
  • 代码可读性
  • Activity或者Fragment应该保持尽可能多的线程管理

以下是关于各种方法的印象摘要(可能有些错误,有些只是意见):

的AsyncTask

当我第一次跳入Android时,我AsyncTask没有使用简单LoaderManager:

  • 有间歇性的问题,我自己写了AsyncTaskManager一个用活动生命周期来管理它们.
  • 任务数量存在一些限制,之前已报告过内存泄漏.
  • 这些问题的最大问题在于它们使我的代码非常复杂,并且简化代码首先失败了使用它们的目的.

带有LoaderManager的AsyncTaskLoader

这似乎是推荐的方法,所以我研究了一下:

  • 在阅读了这些之后,似乎推荐这种方法的主要原因是因为它管理Fragment生命周期中的任务,并且从我的理解基本上只是在必要时重新启动任务.在活动重新启动后重新启动活动之前,它似乎无法接收启动任务的结果.
  • 所有任务参数似乎必须是ParcelableSerialiazable进入Bundle对象.

处理程序,线程,消息

这是我确定的方法:

  • 易于实施,极易定制.
  • 您可以访问执行任务的线程:设置优先级,设置调试的线程名称,设置守护程序等.
  • 看起来比使用AsyncTasks更具响应性,基于眼睛测试我多次点击按钮并观看结果和线程闪烁;)我可以对此进行基准测试.
  • 要处理生命周期问题,可以编写一个管理消息的单例类(在进程处于活动状态时保持不变).在未设置给定活动的处理程序时存储它们,然后在它询问其错过的消息时将它们转发到活动处理程序.意味着任务不必使用相同的参数重新启动,这对于非幂等的任务非常重要.

所以,我来到了,使用的结论Handler,ThreadsMessages是一个更好的解决办法,但我相信,我失去了一些东西,因为几乎到处都看着我的建议是使用AsyncTaskLoader方法.我错过了什么?

感谢您的投入.

multithreading android android-ui android-asynctask android-handler

8
推荐指数
1
解决办法
4631
查看次数

Handler.postDelayed(Runnable)vs CountdownTimer

有时我们需要在代码运行之前延迟它.

这是可以通过Handler.postDelayed(Runnable)CountdownTimer.

哪一个在性能方面更好?

请参阅下面的示例代码

处理器

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                 //DO SOMETHING
            }
        }, 1000);
Run Code Online (Sandbox Code Playgroud)

倒计时器

        new CountDownTimer(1000, 1000) {
            public void onFinish() {
                 //DO SOMETHING
            }
            public void onTick(long millisUntilFinished) {}
        }.start();
Run Code Online (Sandbox Code Playgroud)

performance android countdowntimer android-handler

8
推荐指数
2
解决办法
5464
查看次数