标签: android-handler

Handler vs AsyncTask vs Thread

我稍微感到困惑之间的差异Handlers,AsyncTaskThreads在Android中.我在stackoverflow中阅读了很多博客和问题.

Handler是后台线程,提供您与UI进行通信.例如,更新进度条应该通过Handler.使用处理程序可以获得优势MessagingQueues,因此,如果要计划消息或更新多个UI元素或具有重复任务.

AsyncTask类似的,实际上它们使用Handler但不在UI线程中运行,因此它对于获取数据很有用,例如获取Web服务.稍后您可以与UI进行交互.

Thread然而,无法与UI交互,提供更多"基本"线程,你错过了所有的抽象AsyncTask.

但是,我想在服务中运行套接字连接.应该在处理程序或线程中运行,还是在AsyncTask?根本不需要UI交互.它在我使用的性能方面有所不同吗?

与此同时,文件已得到重大改进.

multithreading android android-asynctask android-handler

379
推荐指数
8
解决办法
13万
查看次数

从另一个线程在主线程中运行代码

在android服务中,我创建了一些用于执行某些后台任务的线程.

我有一种情况,线程需要在主线程的消息队列上发布某些任务,例如a Runnable.

有没有办法获得Handler主线程并从我的其他线程发布Message/ Runnable到它?

谢谢,

java multithreading android android-handler

302
推荐指数
11
解决办法
25万
查看次数

此Handler类应该是静态的,否则可能会发生泄漏:IncomingHandler

我正在开发一个带有服务的Android 2.3.3应用程序.我在服务中有这个与Main活动进行通信:

public class UDPListenerService extends Service
{
    private static final String TAG = "UDPListenerService";
    //private ThreadGroup myThreads = new ThreadGroup("UDPListenerServiceWorker");
    private UDPListenerThread myThread;
    /**
     * Handler to communicate from WorkerThread to service.
     */
    private Handler mServiceHandler;

    // Used to receive messages from the Activity
    final Messenger inMessenger = new Messenger(new IncomingHandler());
    // Use to send message to the Activity
    private Messenger outMessenger;

    class IncomingHandler extends Handler
    {
        @Override
        public void handleMessage(Message msg)
        {
        }
    }

    /**
     * Target we …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks static-classes android-lint android-handler

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

取消handler.postdelayed进程

我正在使用handler.postDelayed()我的应用程序的下一个阶段之前创建一个等待期.在等待期间,我显示一个带有进度条和取消按钮的对话框.

我的问题是我找不到在时间流逝之前取消postDelayed任务的方法.

android postdelayed android-handler

247
推荐指数
3
解决办法
9万
查看次数

如何从Handler中删除所有回调?

我有一个来自我的子活动的Handler,由主Activity调用.这个Handler被子类用于postDelay一些Runnables,我无法管理它们.现在,在这个onStop事件中,我需要在完成Activity之前删除它们(不知何故我调用了finish(),但它仍然一次又一次地调用).无论如何要从处理程序中删除所有回调?

java android callback android-handler

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

现在 Handler() 已被弃用,我该使用什么?

如何修复此代码中的弃用警告?或者,还有其他选择吗?

Handler().postDelayed({
    context?.let {
        //code
    }
}, 3000)
Run Code Online (Sandbox Code Playgroud)

java android kotlin android-handler

184
推荐指数
12
解决办法
7万
查看次数

Android:我什么时候应该使用Handler(),什么时候应该使用Thread?

当我需要异步运行某些东西时,例如长时间运行的任务或使用网络的逻辑,或者出于任何原因,启动新线程并运行它可以正常工作.创建一个处理程序并运行它也可以.有什么不同?我什么时候应该使用每一个?使用a Handler而不是a 的优点/原因是Thread什么?

PS.- 为了这个问题,让我们忽略AsyncTask.- Handler().postDelayed用例对我来说很清楚,对于这个问题,我们假设我需要立即启动任务.

multithreading android android-handler

126
推荐指数
5
解决办法
9万
查看次数

停止handler.postDelayed()

我通过新的Handler()调用多个处理程序.postDelayed(new Runnable().....如果单击返回按钮,我怎么能阻止它?

public class MyActivity extends AppCompatActivity implements OnClickListener {

    private Button btn;
    private Handler handler;
    private Runnable myRunnable;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        btn = (Button) findViewById(R.id.trainingsstart);
        btn.setOnClickListener(this);   
    }

    @Override
    public void onClick(View v) {
        Handler handler =  new Handler();
        Runnable myRunnable = new Runnable() {
            public void run() {
                // Things to be done
            }
        };

        handler.postDelayed(myRunnable, 3000);
    }

    @Override 
    public void onBackPressed() { 
        super.onBackPressed();
        handler.removeCallbacks(myRunnable);
    }   
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题,我的处理程序没有像"myHandler"这样的名字.我该怎么处理?感谢帮助!

现在我收到了这些错误:

03-28 17:47:03.662: E/AndroidRuntime(1961): FATAL EXCEPTION: main …
Run Code Online (Sandbox Code Playgroud)

android handler postdelayed android-handler

94
推荐指数
3
解决办法
8万
查看次数

处理程序是抽象的,无法实例化

我想Handler在我的应用程序中使用a .但是当我像这样实例化时:

Handler handler = new Handler();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

Gradle: error: Handler is abstract; cannot be instantiated
Run Code Online (Sandbox Code Playgroud)

当我检查解决方案时,它要求我实现这些方法:

Handler handler = new Handler() {
        @Override
        public void close() {

        }

        @Override
        public void flush() {

        }

        @Override
        public void publish(LogRecord record) {

        }
    };
Run Code Online (Sandbox Code Playgroud)

我以前从未使用Handlers过,我只是在经过一段时间后调用方法.为此,我使用了:

handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Do something after 100ms
            }
        }, 100);
Run Code Online (Sandbox Code Playgroud)

但它显示错误:

Gradle: error: cannot find symbol method postDelayed(<anonymous Runnable>,int)
Run Code Online (Sandbox Code Playgroud)

请帮忙!提前致谢.

java android android-handler

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

最好使用HandlerThread而不是其他类似的类

我试图了解使用的最佳用例HandlerThread.

根据定义:

"用于启动具有looper的新线程的方便类.然后可以使用looper来创建处理程序类.请注意,仍然必须调用start()."

我可能是错的,但类似的功能,我可以通过使用实现Thread,LooperHandler.那么我HandlerThread什么时候应该使用?一个例子真的很有帮助.

android android-handler

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