标签: android-handlerthread

与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 void run (){
            mHelloLogger = new HelloLogger();
            mHandler = new Handler(getLooper()){
                public void handleMessage(Message msg){
                    mHelloLogger.logHello();
                }
            };
            super.run();
        }
    }
    private class HelloLogger {
        public HelloLogger …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-handler android-handlerthread

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

为什么在Android中使用HandlerThread

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

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

android android-handler android-handlerthread

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

“与所有者的长时间监视器争用”警告

我收到这条警告消息,因为我看到这条消息,我也开始看到Google Play 服务没有响应弹出窗口,一段时间后它关闭了我的应用程序。我看过类似的问题,但找不到原因。

以下是我的处理程序线程使用示例。我不知道该怎么做才能避免这个问题。

@Override
public void find(Func1<RealmQuery<Artist>, RealmQuery<Artist>> query,
                 Action1<Result<List<Artist>>> onResult) {
    if (query != null) {


        handlerThread = new HandlerThread("MyHandlerThreadArtist");
        handlerThread.start();
        looper = handlerThread.getLooper();

        Handler handler = new Handler(looper);

        handler.post(new Runnable(){
            @Override
            public void run() {
                Timber.log(Log.DEBUG, "ARTISTDAOIMPL", "find Thread.currentThread().getName() " + Thread.currentThread().getName());

                mDatabase.findRealmObject(Artist.class, query,
                        result -> onResult.call(
                                Result.getData(Arrays.asList(result.data.toArray(new Artist[]{})))
                        ), err -> onResult.call(Result.getError(err))
                );
            }
        });

    }


12-17 15:56:44.631  2944  2977 W art     : Long monitor contention with owner Answers Events …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-anr-dialog google-play-services android-handlerthread

10
推荐指数
0
解决办法
2215
查看次数

HandlerThread与IntentService

我想请某人解释一下,HandlerThread和IntentService之间的主要区别是什么,以及主要的用例场景是什么?

我知道HandlerThread包含一个Looper,它管理messageQueue,由Handler提供.据我所知,你可以推送HandlerThread的任务,它将执行.使用非UI相关的长时间运行操作非常棒,您可以通过runOnUiThread()将结果推送回UI .

相比之下,IntentService适用于长时间运行,非uUI相关的操作,可以按顺序执行任务,当它完成调用selfStop()的作业以完成关闭时.如果一个IntentService正在处理一个任务,当一个新请求到达它时,它会添加到队列并处理第二个,当它完成第一个任务时.

从我的观点来看,他们以同样的方式做同样的工作.假设我有一个应用程序,用户点击按钮,我开始下载文件.如果用户多次点击,则新任务将排队,仅在第1次完成时启动第2次.我该怎么用?IntentService还是HandlerThread?

android android-intentservice android-handlerthread

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

Android 中的完成处理程序

我是一名 iOS 开发人员,最近刚尝试过 Android 开发。

在 iOS 中,我在我的代码中使用完成处理程序。

我想知道在Android开发中是否有等价物?

谢谢

android handler android-handler android-handlerthread

6
推荐指数
1
解决办法
2717
查看次数

处理程序或启动协程作业以在主线程中执行某些操作

我一直想知道使用Handler( Looper.getMainLooper()) 或启动新的协程作业在主线程上执行小操作(例如更新视图)是否是更好的方法。

处理程序:

val uiHandler = Handler(Looper.getMainLooper())

fun foo() {
    uiHandler.post { 
        someView.update()
    }
}
Run Code Online (Sandbox Code Playgroud)

协程

fun foo() {
    lifecycleScope.launch {
        someView.update()
    }
}
Run Code Online (Sandbox Code Playgroud)

我真的不知道,也无法在互联网上找到任何相关内容,但我很想获得这些知识。

android android-handler android-handlerthread android-looper kotlin-coroutines

6
推荐指数
1
解决办法
1221
查看次数

HandlerThread中的NullPointerException

这个错误困扰了我好几个小时.我收到了NullPointerException.问题是这个错误不一致.它发生在我启动应用程序时,但只是偶尔发生.所以我不确定是什么导致它.

我为错误日志的冗长问题道歉,但我找不到另一种询问方式.

错误日志如下:

FATAL EXCEPTION: main
Process: com.myproject.android, PID: 22175
java.lang.NullPointerException
    at com.myproject.android.ImageDownloaderThread.queueImage(ImageDownloaderThread.java:74)
    at com.myproject.android.NewsItemPagerActivity$NewsItemFragmentStatePagerAdapter.getItem(NewsItemPagerActivity.java:325)
    at android.support.v13.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:109)
    at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:982)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
    at android.view.View.measure(View.java:16497)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:16497)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
    at android.view.View.measure(View.java:16497)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
    at android.view.View.measure(View.java:16497)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
    at android.view.Choreographer.doFrame(Choreographer.java:544)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515) …
Run Code Online (Sandbox Code Playgroud)

android message-queue background-thread android-handlerthread android-looper

5
推荐指数
1
解决办法
2582
查看次数

如何停止处理程序线程?

我想在单击按钮时停止此线程。

TIME_OUT = 45000;
new Handler().postDelayed(new Runnable() {
       @Override
       public void run() {
         Intent i = new 
         Intent(MapsActivity.this,MapsActivity.class);
         startActivity(i);
         finish();
       }
     }, TIME_OUT);
Run Code Online (Sandbox Code Playgroud)

我在onCreate一个活动中使用上面的处理程序。我想阻止它。如何在单击任何按钮或单击 Back Pressed 时停止此线程?

android android-handlerthread

0
推荐指数
1
解决办法
9536
查看次数