looper

Android系统消息处理机制

会有一股神秘感。 提交于 2020-01-19 12:09:55
Android系统消息处理机制 前言 在Android应用开发中,主线程一般都是UI操作,子线程去完成一些耗时操作。主线程会一直等待系统或者用户的响应,从而完成对UI的渲染和显示。在学些之前,先了解两个linux的知识点: 管道(pipe):管道是一种IPC机制,作用于有血缘关系的进程之间,完成数据传递,调用pipe系统函数可创建一个管道。其本质是一个虚拟文件(实际为内核缓冲区),采用半双工通信方式,数据只能在一个方向流动。 int pipe ( int pipefd [ 2 ] ) ; //成功:0;失败:-1,设置errno 函数调用成功后返回r/w两个文件描述符,无需open,但要显示的close,fd[0] --> r,fd[1] --> w,向管道文件读写数据实际上是在读写内核缓冲区。下面是完成进程间通信的调用逻辑: 父进程调用pipe函数创建管道,得到两个文件描述符fd[0]、fd[1]指向管道的读写端。 父进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道。 3)父进程关闭管道读端,子进程关闭管道写端。父进程可以向管道中写入数据,子进程向管道中的数据读出,由于管道是利用环形缓冲区实现得,数据从写端流入管道,从读端流出,这样就实现了进程间通信。 epoll 机制:epoll是linux内核的一种可拓展的IO事件处理机制

A WebView method was called on thread".....”All WebView methods must be called on the same thread

假如想象 提交于 2020-01-19 04:41:06
RuntimeException: java.lang.Throwable: A WebView method was called on thread ‘OkHttp http://www.zhidianbao.cn/…’. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {14e8ab4f} called on null, FYI main Looper is Looper (main, tid 1) {14e8ab4f}) 来源: CSDN 作者: DingPenqQiang 链接: https://blog.csdn.net/qq_36707431/article/details/103955719

【bluz】bnep测试

点点圈 提交于 2020-01-14 07:21:45
自己编写的程序是按照tools下的gatt-service.c编译的,编译时加入了libtool生成的内部库libgdbus-internal.la,但是依旧有一些未定义的程序问题。查看makefile发现,需要将profile/iap目录下都包含 进来。 所以接下来是将修改自己的程序 来源: CSDN 作者: sws_looper 链接: https://blog.csdn.net/sws_looper/article/details/103944129

Where to “quit” with looper?

五迷三道 提交于 2020-01-12 09:45:08
问题 I have a problem with a looper. I call looper.prepare() , and after doing something it all works fine. But if I rotate the device I get an exception on the prepare. 07-12 16:40:09.760: E/activity(15809): java.lang.RuntimeException: Only one Looper may be created per thread I'm trying to quit the looper, but it doesn't do anything. Here is my AsyncTask: @Override protected String doInBackground(String... args) { try{Looper.prepare(); //here start the exception try { URL url = new URL(link);

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

给你一囗甜甜゛ 提交于 2020-01-06 05:07:11
问题 I am using simple thread to execute the httpGet to server when a button is clicked, but I get this after execution. Button b_back = (Button) findViewById(R.id.bback); b_back.setOnClickListener(this); Button b_sign_up = (Button) findViewById(R.id.signup_button); b_sign_up.setOnClickListener(this); @Override public void onClick(View arg0) { // TODO Auto-generated method stub switch (arg0.getId()) { case R.id.bback: Intent i = new Intent(this, MainSwitch.class); finish(); startActivity(i); break

How to manage Loopers and Threads (thread doesn't die anymore!)

天涯浪子 提交于 2020-01-01 04:54:06
问题 I created a class extending Thread to retrieve user location through LocationManager in a non-ui thread. I implemented this as a thread because it has to be started on request and do its work just for a limited time. By the way, I had to add a Looper object in the thread, to be able to create the handler for the LocationManager (onLocationChanged). This is the code: public class UserLocationThread extends Thread implements LocationListener { //... public void run() { try { Looper.prepare();

多线程(四)、Android多线程使用及AsyncTask源码分析

半城伤御伤魂 提交于 2020-01-01 00:59:19
本篇是多线程系列的第四篇,如果对前三篇感兴趣的也可以去看看。 多线程(一)、基础概念及notify()和wait()的使用 多线程(二)、内置锁 synchronized 多线程(三)、线程池 ThreadPoolExecutor 知识点总结 除了前面的线程池的使用外,在Android中,我们除了通过 Thread 创建线程外,还可以通过 AsyncTask 、 IntentService 、 HandleThread 来创建,线程池前面一篇已经详细介绍了,下面对其他几个方法简单的介绍。 1.1、HandleThread 1.1.1、源码 public class HandlerThread extends Thread { int mPriority; int mTid = - 1 ; Looper mLooper; public HandlerThread (String name) { super (name); mPriority = Process.THREAD_PRIORITY_DEFAULT; } public HandlerThread (String name, int priority) { super (name); mPriority = priority; } protected void onLooperPrepared () { } @Override

Only one Looper may be created per thread Error, Async Task

人走茶凉 提交于 2019-12-23 02:59:08
问题 The code at the bottom of this post is triggered by the following line of code. new MasterClickAsyncTask(main).execute(position); The doInBackground portion of code below calls a method containing a for loop, hence the need for Looper.prepare(). This code runs fine the first few times it is called but then it throws the following error: 10-15 22:50:24.752: ERROR/AndroidRuntime(9258): Caused by: java.lang.RuntimeException: Only one Looper may be created per thread I've tried putting Looper

Android中线程和线程池

江枫思渺然 提交于 2019-12-21 05:10:55
我们知道线程是CPU调度的最小单位。在Android中主线程是不能够做耗时操作的,子线程是不能够更新UI的。在Android中,除了Thread外,扮演线程的角色有很多,如AsyncTask,IntentService和HandlerThread等等。由于内容过多,所以将分为上下两部分,第一部分主要和大家谈谈Android中的线程,以及在Android中的常用的线程池。第二部分我们一起来了解一下AsyncTask的使用和工作原理。 1、HandlerThread HandlerThread是Thread的子类,它是一种可以使用Handler的Thread,它的实现比较简单。我们来看看它的源码: 1 package android.os; 2 3 public class HandlerThread extends Thread { 4 int mPriority; 5 int mTid = -1; 6 Looper mLooper; 7 8 public HandlerThread(String name) { 9 super(name); 10 mPriority = Process.THREAD_PRIORITY_DEFAULT; 11 } 12 13 14 public HandlerThread(String name, int priority) { 15 super

主线程与子线程之间相互通信

流过昼夜 提交于 2019-12-17 13:45:14
在平时写程序时,我们一般都是在子线程中向主线程发送消息,从而完成请求的处理,这个很常见,不用多说了。那么有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程发送消息,希望子线程来完成什么任务。如果这样子应该怎么做呢?这就是这篇文章将要讨论的内容。 一、HandlerThread类 主线程发送消息给子线程,通常思维逻辑就是:其实很简单,在主线程中实例化一个Handler,然后让他与子线程相关联(只要它与子线程的Looper相关联即可),这样子它处理的消息就是该子线程中的消息队列,而处理的逻辑都是在该子线程中执行的,不会占用主线程的时间。那么我们就来实现一下,看看这样子到底行得通还是行不通。新建项目,修改它的MainActivity的代码,如下即可: 1 package com.example.handldertest; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.os.Looper; 7 import android.util.Log; 8 import android.widget.TextView; 9 10 public class ThreadHandlerActivity extends