Articles of android handler

Job Scheduler与后台服务

我有一个应用程序,它具有每分钟应该在后台运行的functionA. functionA是应用程序应该连接到数据库,读取一些数据,然后获取设备的当前位置,并根据它们检查条件,如果条件为真,则应该向用户发送状态栏通知,以便当用户点击通知应用程序的用户界面将显示,并发生一些事情。 这个后台任务应该每分钟运行一次,无论应用程序是否被使用,closures,终止(就像facebook或Whatsapp向我们显示通知,无论他们是否在应用程序堆栈中)。 现在我已经search并发现Android提供了Job Scheduler , Background Service , AlarmManager和Handlers 。 但是,我越读到他们,这些陈述就越是矛盾。 1.关于处理程序我已经读过,它们不存在长时间的延迟,并将在系统重新启动后终止。 所以他们不适合我的任务。 2.但AlarmManager似乎是一个很好的候选人的问题,因为如果允许他们存在,即使系统重新启动,并可以重新运行应用程序。 但在Android文档中,警报pipe理器旨在用于必须在特定时间运行的任务(如闹钟)。 但我的任务必须每分钟运行一次。 3.然后是后台服务。 这是更多的任务,像我已经阅读的背景下载,并不打算做我已经解释的东西。 4. JobScheduler似乎不是一个需要永久完成的任务,而是完成特定约束的任务,比如空闲或者没有networking。 那么,这些(或者其他的,如果存在的话)是否推荐用于我在第一部分中解释的任务

如何在android studio中正确使用postDelayed()?

我有一个countDownTimer,如果用户没有在第12秒内击中gameButton,我想要调用gameOver方法。 问题或者当countDownTimer是12或者定时器只是继续倒计时时,我会得到称为instamtly的游戏function。 所以我正在尝试使用postDelayed()方法给用户一个完整的秒击中button,让countDownTimer继续,但因为我的代码是现在的游戏停在12不pipe。 import android.app.Activity; import android.os.CountDownTimer; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class GameScreen extends Activity { private TextView time; private Button start; private Button cancel; private Button gameButton; private CountDownTimer countDownTimer; public static int count = 0; public static int countFail = 0; final […]

谷歌地图API中的标记的GIFtypes的animationANDROID

我想要实现一个标记animation,如GIFanimation。 我有两个应该同时闪烁的图像。 我没有发现任何可以实现这一点在Android中。 我试图做的是,创build一个每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); marker_animation()方法 private final int ONE_SECONDS = […]

Bundle对象的突变

我正在使用遗留代码,我发现这个函数中有一个不一致的行为: @Override public void openFragment(final Class<? extends BaseFragment> fragmentClass, final boolean addToBackStack, final Bundle args) { long delay = 0; if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { delay = getResources().getInteger(android.R.integer.config_shortAnimTime) * 2; } // FIXME: quick fix, but not all cases final Bundle args666 = args != null ? (Bundle) args.clone() : null; new Handler().postDelayed(new Runnable() { @Override public […]

缺lessAndroid Studio中的android.os.handler对象

我试图在我的应用程序中创build一个Handler线程,但Android Studio将我的文本标记为红色,并且只会尝试导入处理程序的java.util版本而不是Android SDK版本。 当试图手动导入我能够findHandlerThread就好了,但正常的处理程序导入似乎缺less。 任何想法为什么?

Android AsyncTask vs Thread + Handler vs rxjava

我知道这是被问了很多次的问题。 然而,我从来没有find答案。 所以希望有人能给我一些启示。 我们都知道AsyncTask和Thread是执行后台任务以避免ANR问题的选项。 build议asynctask只能用于短时间运行的任务,而线程可以用于长时间运行的任务。 众所周知,Asynctask不应该用于长时间任务的原因是由于Asynctask可能会在活动被破坏之后继续运行而引起的泄漏。 这是令人信服的。 但是,这也会导致其他一些问题: 线程是否也独立于活动生命周期? 因此,asynctask的风险也可以应用于线程。 那么为什么线程适合长时间运行的任务呢? 看起来asynctask的风险只适用于与活动一起使用。 如果我们在服务中使用它(而不是IntentService,因为IntentService在它的工作完成后就停止了),只要我们可以保证在服务停止的时候取消asyntask,我们可以把它用于长时间运行的任务吗? 这是不是意味着在服务中使用asynctask是无风险的? 我和rxjava玩了一段时间,真的很喜欢它。 它消除了需要担心线程的问题(除非你必须决定在哪个线程中订阅和观察发送的数据)。 从我所看到的,rxjava(与其他一些libs一起,如retrofits)似乎是asynctask和thread的完美替代品。 我想知道如果我们可以完全忘记他们,或者有任何具体的情况,rxjava无法实现什么asynctask和线程可以做,我应该知道的? 谢谢

我应该手动closures由我的应用程序创build的HandlerThreads在销毁活动?

我的应用程序是由一个单一的Activity 。 在这个活动中,我创build了多个在循环中运行的HandlerThread ,以执行套接字阻塞操作。 目前,我在Activity.onDestroy()期间向这些HandlerThread的每个人发布了一条退出消息。 有时,当我打开我的应用程序,closures它,并重新启动,它崩溃(很多时间,因为发布一个消息处理程序线程不运行)。 我的问题是: closures我的应用程序时closuresHandlerThread的正确方法是什么? (请注意,这些线程可能会阻塞套接字操作)。 编辑:更多信息:我有一个处理程序线程池,这是在onCreate(当我第一次启动我的应用程序时没有问题)启动。 每个处理程序的可运行循环都包含一个 if (shouldRun) { //body } else { close(); } 声明。 close方法移除所有待处理的消息和可运行参数,并向处理程序发送消息,使其调用其looper.quit() 。 这样,如果当前处理程序线程被IO操作阻塞,只有一次它将完成它将退出()。

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

我有一个主要活动和绑定服务。 绑定服务从networking接收命令,触发消息发送到主活动中的处理程序。 通过传递处理程序对服务的引用,我得到了一切工作。 然后…我偶然发现了这个叫做Messenger的东西。 信使:引用一个处理程序,其他人可以使用它来发送消息。 这允许跨进程实现基于消息的通信,方法是在一个进程中创build指向Handler的Messenger,然后将该Messenger交给另一个进程。 这启发了几个问题: 术语过程是否意味着我将不需要使用Messenger,除非我在Process和Thread指导下生成一个单独的过程? 使用Messenger是否总是很好的做法? 传递给Handler的参考通常是一个坏主意?

为什么在Android中使用HandlerThread?

在android中,Handler可以用来发布/处理消息,如果我不使用HandlerThread(把它的Looper传递给Handler),这是否意味着在这种情况下Handler使用MainThread(UI Thread)的Looper? 如果Handler使用MainThread的Looper会得到什么结果? 可能导致mainThread被阻塞?

尝试调用空对象引用的虚拟方法'int android.text.Layout.getLineCount()'

我得到空指针exception随机,通常是有效的,有时它崩溃,我已经搜查了很多,但没有得到任何帮助,因为它没有从我得到任何帮助, 我也使用它的处理程序。 我的logcat错误如下,并在其下面添加代码, java.lang.NullPointerException: Attempt to invoke virtual method 'int android.text.Layout.getLineCount()' on a null object reference at android.widget.TextView.onMeasure(TextView.java:6703) at android.view.View.measure(View.java:17547) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17547) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) at android.view.View.measure(View.java:17547) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:17547) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at android.view.View.measure(View.java:17547) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) at […]