Articles of android handler

当CPUhibernate时,Handler post会不会被解雇吗?

我有一些活动与一些Handlers ,每隔不超过5分钟执行一次。 该活动是从BroadcastReceiver启动的,可以在屏幕关闭的情况下启动,等待用户抓取手机并获取用户输入,当发生这种情况时,会调用onPause()活动,以确保CPU处于睡眠模式。 我没有将活动设置为打开屏幕,因为我想尽可能多地保存电池。 我用我的手机测试了它并且工作得非常好,而屏幕关闭所有Handlers执行他们必须运行的所有代码。 如果我在活动打开时打开和关闭屏幕,一切正常。 现在,我已经到处读到,当屏幕关闭且CPUhibernate时,某些设备无法按预期工作,大多数时候都使用加速度计。 现在我的问题是,我是否需要获取一个WakeLock以便CPU在我的活动打开时不会睡觉? 我真的想知道这一点,因为正如我之前所说,我不想通过购买昂贵的WakeLock来“浪费”电池。 我更喜欢一个真正了解其工作原理的人的详细答案。

Android:为什么Handlers发布了runnable?

有人可以解释为什么Handlers发布了一个可运行的? 覆盖handleMessage和发送消息是否也做同样的事情? 我写了一些未经测试的代码来说明我认为这两种方式是如何实现的。 如果我的方法错了,请纠正我。 邮政处理程序: handler.post(new Runnable() { @Override public void run() { imageView.doSomething(); } }); 带handleMessage的处理程序: final Handler handler = new Handler() { @Override public void handleMessage(Message message) { imageView.doSomething(); } }; handler.sendMessage(message);

实现AsyncQueryHandler

我正在尝试实现AsyncQueryHandler因为我在此链接中遇到了同样的问题,但我没有看到任何关于实现它的示例或任何内容。 我试过了 AsyncQueryHandler handler = new AsyncQueryHandler(getContentResolver()); 因为这是构造函数在文档中显示的内容,但是我得到一个错误,说cannot instantiate the type AsyncQueryHandler那么我该如何使用呢?

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

我有一个countDownTimer,如果用户在第12秒内没有点击gameButton我想要调用gameOver方法。 问题当countDownTimer为12或者计时器只是不断倒计时,我或者得到称为instamtly的游戏function。 所以我试图使用postDelayed()方法给用户一个完整的秒来点击按钮并让countDownTimer继续,但正如我的代码现在,游戏停在12无论如何。 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 […]

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

我想知道我们是否有可能在android上处理/检测带延迟的可运行回调( postDelayed方法)? 例如,我有一个或几个splashscreen(在我的应用程序上运行handler.postDelayed(new Runnable()… )(用于测试目的的应用程序)。在这个应用程序中我还有一个库(我正在创建和使用它)它在应用程序中)和一些在IntentService类上运行的类。 有时,当应用程序运行那些splashscreen活动(用于Testing purpose )时,我正在创建的库可能会在UI中自动popup一些活动。 但似乎如果这些活动出现在splashscreen活动并且splashscreen被破坏,那些活动(自动popup)也将被破坏并在logcat中记录“泄露的窗口”消息。 问题是: 不应自动关闭UI中自动显示的那些活动,这是禁止的。 它需要用户进行交互以关闭该活动并返回应用程序的正常行为。 此外,该库对应用程序的UI一无所知。 所以我的问题是(相对于我正在创建的库方面而没有UI应用程序流的信息): 有没有办法检测是否在相对于库方面的应用程序中创建了一些postDelayed方法? 如果是,我该如何处理这个问题呢? PS:请注意,通常情况下,我正在使用一个Dialog来自动显示假设的Activity。 UPDATE 图解说明: 现在我有一个正在执行Splashscreen的案例。 扩展IntentService类的类已收到来自Internet的请求,该请求将启动一个Activity 。 同时,启animation面在后postdelayed ,其他活动已创建并在UI中显示。 当X秒已经过去且另一个Activity未被销毁时,将创建Next Activity并自动销毁另一个Activity 。 在这样做时,Android会相对于Activity抛出“泄露的窗口”消息。

尝试在空对象引用上调用虚方法’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 […]

AsyncTaskLoader基本示例。 (机器人)

我在我的应用程序中使用Loader,并根据我使用此Loader在COntacts上执行的查询得到的结果,我执行一些计算并将它们存储回Sqlite DB中。 我希望这个操作是异步的,但我在使用Async任务之间感到困惑,因为我要返回很多不同的数据types,或者我应该使用简单的处理程序或AsyncTaskLoader,我希望它很简单,因为我是新手装载机。 我试图搜索AsyncTaskLoader的例子,但它似乎是火箭科学,在我的场景的上下文中的三个中的任何一个的基本和简单的function示例将是非常有用的。

Job Scheduler与后台服务

我有一个应用程序,其functionA应该每分钟在后台运行。 functionA是应用程序应该连接到数据库,读取一些数据然后获取设备的当前位置,并根据它们检查条件,如果条件为真,它应该向用户发送状态栏通知,以便用户点击通知,将显示应用程序的UI并发生一些事情。 这个后台任务应该每分钟都运行一次,无论应用程序是否被使用,关闭,终止(例如facebook或Whatsapp向我们显示通知,无论它们是否在应用程序堆栈中)。 现在我已经搜索并发现Android提供Job Scheduler , 后台服务 , AlarmManager和处理程序 。 但是我越了解他们,这些陈述对我来说就越矛盾。 关于处理程序我已经读过它们不存在长时间延迟,并将在系统重启后终止。 所以他们不适合我的任务。 但是AlarmManager似乎是这个问题的一个很好的候选者,因为在允许的情况下它们甚至在系统重启后也存在,并且可以重新运行应用程序。 但在Android文档中,Alarm Manager旨在用于必须在特定时间运行的任务(如闹钟)。 但我的任务必须每分钟运行一次。 然后是后台服务。 这更像是我在阅读后在后台下载的任务,而不是用于我已经解释过的事情。 JobScheduler似乎不是为了必须永久完成的任务,而是为了满足特定约束的任务,如空闲或没有网络……那么你建议使用哪些(或其他的,如果它们存在)对于我在第一部分中解释的任务

与HandlerThread通信的示例

我想从GUI线程设置一个HandlerThread。 然后一段时间后,当在GUI上单击一个按钮时,它会运行callHello(),然后将消息发送到驻留在非GUI线程上的HelloLogger对象,该线程异步记录“Hello World”。 我已经尝试过很多东西,有些是无限期阻塞,有些是从不接收消息等等。下面的代码或多或少都和我一样近,请有人修改它吗? public class HandlerThreadExample { private MyHandlerThread mMyHandlerThread; private Looper mLooper; private Handler mHandler; public HandlerThreadExample(){ mMyHandlerThread = new MyHandlerThread(); mMyHandlerThread.start(); mLooper = mMyHandlerThread.getLooper(); } public void callHello() { mHandler.sendEmptyMessage(1); } private class MyHandlerThread extends HandlerThread { private HelloLogger mHelloLogger; private Handler mHandler; public MyHandlerThread() { super(“The MyHandlerThread thread”, HandlerThread.NORM_PRIORITY); } public […]

如何从服务中调用活动中的方法

有一种服务可以听取一些声音。 如果语音匹配字符串,则在服务对象中调用某个方法。 public class SpeechActivationService extends Service { public static Intent makeStartServiceIntent(Context pContext){ return new Intent(pContext, SpeechActivationService.class); } //… public void onMatch(){ Log.d(TAG, “voice matches word”); } //… } 这是我在我的活动中启动服务的方式: Intent i = SpeechActivationService.makeStartServiceIntent(this); startService(i); 从这个服务方法,我如何调用驻留在activity对象中的方法? 我不想从活动到服务,而是从服务到活动。 我已经阅读过有关处理程序和广播公司的内容,但无法find/理解任何示例。 有任何想法吗?