android线程

黑马程序员----java基础----多线程

佐手、 提交于 2020-03-06 18:44:28
------ Java培训、Android培训、iOS培训、.Net培训 、期待与您交流! ------- 一、理解线程   进程:每个独立执行的程序称之为进程。   线程:线程就是一个进程内部的一条执行路径。   多线程:在java 虚拟机启动的时候会有一个 java.exe 的执行程序,也就是一个进程。该进程中至少有一个线程负责 java 程序的执行。而且这个线程运行的代码存在于 main 方法中。该线程称之为主线程。 JVM 启动除了执行一个主线程,还有负责垃圾回收机制的线程。像种在一个进程中有多个线程执行的方式,就叫做多线程。   线程和多线程区别如下:     ( 1 )每个进程都有独立的代码和数据空间,进程间的切换开销大。     ( 2 )同一进程内的多个线程共享相同的代码,每个线程有独立的运行栈和程序计数器,线程间的切换开销小。 二、创建线程的方式   创建线程共有两种方式:继承方式和实现方式(简单的说)。     1 、 继承方式       通过查找 java 的帮助文档 API ,我们发现 java 中已经提供了对线程这类事物的描述的类 ——Thread 类。这第一种方式就是通过继承 Thread 类,然后复写其 run 方法的方式来创建线程。     创建步骤:     (1),定义类继承 Thread 。     (2),复写 Thread 中的 run

Android 子线程间通信

时光总嘲笑我的痴心妄想 提交于 2020-03-05 01:53:18
1.在android中我们平时处理的都是子线程与主线程间的通信,采用的方法是利用android中的消息循环机制,说白了就是利用Handler 而子线程与子线程的通信也可以用到Handler,也可以通过全局变量来进行通信 2.消息循环机制就不说了,由于主线程在应用启动的时候系统就给它生成了Looper , MessageQueue等消息循环的东西,所以每次子线程 可以直接往主线程发送message。而子线程是不会自动生成Looper的,就要调用Looper.prepare();方法来为该子线程生成Looper, 生成后调用Loopre.loop()来启动消息队列,再在子线程中定义自己的Handler,其他子线程可以调用该Handler来进行,子线程间的通信了。 3.示例代码: 子线程一:    1       new Thread(new Runnable() { 2 3 @Override 4 public void run() { 5 String msg; 6 Looper.prepare(); 7 8 childHandler = new Handler() { 9 @Override 10 public void handleMessage(Message msg) { 11 super.handleMessage(msg); 12 13 System.out

Android 异常捕获

a 夏天 提交于 2020-03-02 03:07:43
我之前的个人APP 都没有加入 关键远程日志功能。 现在自己的服务器已经稳定成熟。 决定也开始收集异常。帮助自己的程序更加稳健的运行。 处理方法: 1, 新建类 Crashhandler implements Thread.uncaughtExceptionHandler 方法; 2,实现其中的public void onUncaughtException ()方法; 并在这个方法中捕获异常处理信息。 3,关键代码: Thread.setDefaultUncaughtExceptionHandler(this); 这样当程序有未捕获的异常的时候, 便会调用 onUncaughtException 方法。 关键点:在函数 onUncaughtException 的实现中, 要么需要由之前的 默认异常处理handler 来处理异常,要么需要显式的杀死当前进程。 如果不做这个调用, 那么界面就会出现ANR; 4,Thread: Thread.setDefaultUncaughtExceptionHandler(this); 可以在任意线程调用;各个线程的未捕获异常都会在这里被通知。 来源: oschina 链接: https://my.oschina.net/u/592116/blog/714494

并发编程的理论基石

南楼画角 提交于 2020-03-01 23:44:36
一、进程和线程 1.操作系统、进程、线程的关系 操作系统是包含多个进程的容器,而每个进程又是容纳多个线程的容器。 2.Oracle 官方定义 官方定义 进程:使用 fork(2) 系统调用创建的UNIX 环境(例如文件描述符,用户 ID 等),它被设置为运行程序。 线程:在进程上下文执行的一系列指令。 3.什么是进程 进程(Process)是程序的运行实例。 进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位。 在用户下达运行程序的命令后,就会产生进程,任务管理器中的每一个应用都是一个进程。谷歌浏览器的每个标签页和插件都是一个进程。 4.什么是线程 线程是操作系统能够进行资源调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,每个线程执行的都是进程代码的某个片段,特定的线程总是在执行特定的任务。 5.进程和线程的关系 5.1 起源不同 先有进程,后有线程。进程由于资源利用率、公平性和便利性诞生。处理器的速度往往比外设的速度快(键盘、鼠标等),为了提高 CPU 的利用率,诞生了线程,目的就是为了提高程序的执行效率。 5.2 概念不同 进程是资源分配的最小单位。 线程是程序执行的最小单位(线程是操作系统能够进行资源调度的最小单位,同个进程中的线程也可以被同时调度到多个 CPU 上运行),线程也被称为轻量级进程。 5.3 内存共享方式不同 默认情况下

Android 子线程更新UI

≯℡__Kan透↙ 提交于 2020-03-01 22:47:26
一般情况下都认为子线程不能更新UI,这里说的子线程可以更新UI,只是为了探讨,并没有太大的使用意义,只是为了深刻认识更新UI的问题。 看下这个异常 android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 这个异常为何不是 Only the main thread that created a view hierarchy can touch its views 异常中是 original thread, 为何不是 main thread ?说明子线程是可以更新UI的 一、子线程间接更新UI 这种情况其实也是UI线程更新的,并不是真正意义上的更新UI 1、Handler 2、view.post 3、view.posDelay 4、AsyncTask 二、子线程直接更新UI 1、在onCreate中的子线程更新UI,只是钻了空子。 new Thread ( new Runnable ( ) { @Override public void run ( ) { tx . setText ( "non-UiThread update textview" ) ; } } ) . start (

[Android] AsyncTask详解

吃可爱长大的小学妹 提交于 2020-03-01 10:42:51
本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信。 一、Android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有其他的应用程序组件在运行时,Android系统就会为该应用程序组件开辟一个新 的线程来执行。默认的情况下,在一个相同Android应用程序当中,其里面的组件都是运行在同一个线程里面的,这个线程我们称之为Main线程。当我们 通过某个组件来启动另一个组件的时候,这个时候默认都是在同一个线程当中完成的。当然,我们可以自己来管理我们的Android应用的线程,我们可以根据 我们自己的需要来给应用程序创建额外的线程。 二、Main Thread 和 Worker Thread 在Android当中,通常将线程分为两种,一种叫做Main Thread,除了Main Thread之外的线程都可称为Worker Thread。 当一个应用程序运行的时候,Android操作系统就会给该应用程序启动一个线程,这个线程就是我们的Main Thread,这个线程非常的重要,它主要用来加载我们的UI界面,完成系统和我们用户之间的交互,并将交互后的结果又展示给我们用户,所以Main Thread又被称为UI Thread。 Android系统默认不会给我们的应用程序组件创建一个额外的线程

Android两种常见错误(ANR和FC)解决办法

牧云@^-^@ 提交于 2020-03-01 10:10:52
ANR(Activity Not Respone)(无响应) 先介绍下Main线程(也称为UI线程、主线程) 功能: 1.创建UI控件 2.更新UI控件状态 3.事件处理 限制:Main线程不建议有超过5秒的事件 出现条件: 当用户输入事件5s内没有得到响应,将弹出ANR对话框 广播接收者的onReceive()执行时间超过10s 解决方案(原则): 所有可能的耗时操作都要在子线程()中执行 常见耗时操作: I/O:网络操作 SDcard 数据运算 FC(Force close) 原因: 1.Error OOM(out of memory error) StackOverFlowError 2.RuntimeException 解决办法: 看日志 子线程不能更新UI的解决思路: 1、 将子线程执行结果发送到Main线程:handler+massage线程间通讯 发送消息: Message msg = mHandler .obtainMessage( UPLOAD , json ); mHandler .sendMessage( msg ); 接收消息: public void handleMessage(Message msg ) { switch ( msg . what ) { case UPLOAD : mTextView2 .setText((String) msg .

Java多线程整理

空扰寡人 提交于 2020-02-27 08:50:24
目录: 1.volatile变量 2.Java并发编程学习 3. CountDownLatch用法 4. CyclicBarrier使用 5.BlockingQueue使用 6.任务执行器Executor 7.CompletionService使用 8.ConcurrentHashMap使用 9.Lock使用 一、 volatile变量   1.volatile原理:volatile的原理实际上是告诉处理器,不要把变量缓存在寄存器或者相对于其他处理器不可见的地方,而是把变量放在主存,每次读写操作都在主存上进行操作。另外,被申明为volatile的变量也不会与其它内存中的变量进行重排序。   2.volatile同步:volatile是同步的一个子集,只保证了变量的可见性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。相对于同步而言,volatile的优势:a.简易性,可以像使用其他变量一样使用volatile变量;b.volatile变量不会造成线程阻塞;c.如果读操作远远大于写操作,volatile 变量还可以提供优于锁的性能优势。   3.正确使用volatile条件:对变量的写操作不依赖于当前值;该变量没有包含在具有其他变量的不变式中; /* * 对于第一条原则:对变量的写操作不依赖于当前值; * 虽然i++只有一条语句

java线程

牧云@^-^@ 提交于 2020-02-24 22:55:43
Android 多线程编程其实并不比 Java 多线程编程特珠,基本都是使用相同的语法。比如 说,定义一个线程只需要新建一个类继承自 Thread ,然后重写父类的 run() 方法,并在里面 编写耗时逻辑即可,如下所示: class MyThread extends Thread { @Override public void run() { // 处理具体的逻辑 } } 那么该如何启动这个线程呢?其实也很简单,只需要 new 出 MyThread 的实例,然后调 用它的 start() 方法,这样 run() 方法中的代码就会在子线程当中运行了,如下所示: new MyThread().start(); 当然,使用继承的方式耦合性有点高,更多的时候我们都会选择使用实现 Runnable 接 口的方式来定义一个线程,如下所示: class MyThread implements Runnable { @Override public void run() { // 处理具体的逻辑 } } 如果使用了这种写法,启动线程的方法也需要进行相应的改变,如下所示: MyThread myThread = new MyThread(); new Thread(myThread).start(); 可以看到, Thread 的构造函数接收一个 Runnable 参数,而我们 new 出的

Android开发学习笔记

冷暖自知 提交于 2020-02-14 11:57:34
Android开发学习笔记 网络编程 Android的网络通信是基于JAVA的,其代码与JAVA没有明显区别,唯一的不同,就是Android在主线程中不允许进行网络请求中,否则会出现android.os.NetworkOnMainThreadException的异常,所以必须新建一个专门的线程来进行网络通信,具体方法如下。 线程的建立方法 new Thread ( new Runnable ( ) { @Override public void run ( ) { //新线程中要运行的内容 //在这里书写网络通信代码 } } ) . start ( ) ; 来源: CSDN 作者: 263小杰杰 链接: https://blog.csdn.net/qq_38275604/article/details/104297149