android线程

在家办公算划水?你错了。更一篇关于性能优化的总结

左心房为你撑大大i 提交于 2020-02-06 19:49:39
由于最近疫情的问题,很多上班族都延迟的上班时间在家办公,对于疫情祖国已经做出了指示,解放军来了,我们更加坚定必胜信心,希望可以尽快得到控制,为解放军点赞o( ̄▽ ̄)d 那很多人在家选择办公发现真的没有真的在公司那么充实,也刚好金三银四快要到了,这段时间刚好在家可以抽空多充实下自己,今天就更一篇关于性能优化的总结 相关内容之后会在GitHub上更新,希望多多关注 ( 顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS (VX:mm14525201314) ↓获取如下面试笔记 一、Android性能优化的方面 针对Android的性能优化,主要有以下几个有效的优化方法: 1.布局优化 2.绘制优化 3.内存泄漏优化 4.响应速度优化 5.ListView/RecycleView及Bitmap优化 6.线程优化 7.其他性能优化的建议 下面我们具体来介绍关于以上这几个方面优化的具体思路及解决方案。 二、布局优化 关于布局优化的思想很简单,就是尽量减少布局文件的层级。这个道理很浅显,布 局中的层级少了,就意味着Android绘制时的工作量少了,那么程序的性能自然就 提高了。 如何进行布局优化? ①删除布局中无用的控件和层次,其次有选择地使用性能比较低的 ViewGroup

Android IntentService的使用和源码分析

有些话、适合烂在心里 提交于 2020-02-04 03:00:18
引言 Service服务是Android四大组件之一,在Android中有着举足重轻的作用。Service服务是工作的UI线程中,当你的应用需要下载一个文件或者播放音乐等长期处于后台工作而有没有UI界面的时候,你肯定要用到Service+Thread来实现。因此你需要自己在Service服务里面实现一个Thread工作线程来下载文件或者播放音乐。然而你每次都需要自己去写一个Service+Thread来处理长期处于后台而没有UI界面的任务,这样显得很麻烦,没必要每次都去构建一个Service+Thread框架处理长期处于后台的任务。Google工程师给我们构建了一个方便开发者使用的这么一个框架---IntentService。 IntentService简介 IntentService是一个基础类,用于处理Intent类型的异步任务请求。当客户端调用android.content.Context#startService(Intent)发送请求时,Service服务被启动,且在其内部构建一个工作线程来处理Intent请求。当工作线程执行结束,Service服务会自动停止。IntentService是一个抽象类,用户必须实现一个子类去继承它,且必须实现IntentService里面的抽象方法onHandleIntent来处理异步任务请求。 IntentServic示例

EventBus的小tips

牧云@^-^@ 提交于 2020-02-03 18:42:05
1. EventBus的线程模式 2.黏性事件 3. 配置混淆规则 . . . . 0.EventBus的简介 一个Android事件发布/订阅轻量级框架, 功能:通过解耦发布者和订阅者简化Android事件传递 [2] EventBus可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。 特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)。 . . 1. EventBus的线程模式 ThreadMode 因为安卓对线程的严格限制,EventBus也相应的进行的不同的线程控制。通过指定线程模式,我们可以控制订阅回调函数运行于哪一个线程。 线程模式主要有: POSTING :在哪个线程发布就在哪个行程执行 MAIN :在主线程执行,如果订阅方回调事件较为耗时,则发布方的后续指令会被阻塞。 MAIN_ORDERED :发布后会立即执行后续的指令,不会被订阅方回调事件阻塞。 BACKGROUND :在后台线程执行(非UI线程),如果发布方在非UI线程,则订阅方也会在相同的线程,如果发布方在UI线程,则订阅方会新建一个线程,并在该线程中执行。 ASYNC :不管事件在哪个线程发布,都会在独立的新开的线程中执行。可以执行耗时操作 2.黏性事件

[Android Pro] synchronized与static synchronized 的区别

本秂侑毒 提交于 2020-01-31 02:02:54
reference to : http://www.cnblogs.com/shipengzhi/articles/2223100.html 1.synchronized与static synchronized 的区别 synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”, 类的两个不同实例就没有这种约束了。那么static synchronized恰好就是要控制类的所有实例的访问了,static synchronized是限制线程同时访问jvm中该类的所有实例同时访问对应的代码快。实际上,在类中某方法或某代码块中有 synchronized,那么在生成一个该类实例后,改类也就有一个监视快,放置线程并发访问改实例synchronized保护快,而static synchronized则是所有该类的实例公用一个监视快了,也也就是两个的区别了,也就是synchronized相当于 this.synchronized,而 static synchronized相当于Something.synchronized. 一个日本作者-结成浩的《java多线程设计模式》有这样的一个列子: pulbic class Something(){ public synchronized void isSyncA(){

android应用的响应性设计

被刻印的时光 ゝ 提交于 2020-01-24 03:57:25
源地址:${android-sdk-windows}/docs/guide/practices/design/responsiveness.html 你写的代码 也许能够通过世界上所有的性能测试,但是当用户使用你的这个应用的时候却可能会发狂。因为,你的应用程序的用户响应性太差了,比如用起来不够流畅,在关键的时刻挂起或者失去响应,或者花费了太多的时间用来处理用户的输入。 在android系统中,当应用程序在一段时间内没有响应的时候,系统会检测到此种情况,并且向用户显示一个对话框,这个对话框被称为“ANR”对话框(Application Not Responding)。这个时候用户可以选择继续等待程序运行,也可以选择强制关闭此应用。但是,如果每次使用这个应用都要看到这个对话框并且选择操作,显然用户不会很爽。所以,在你的设计中,添加对应用响应性的考虑,以避免系统弹出这个ANR对话框,就显得非常重要。 通常情况下,如果应用不能够响应用户的输入,系统就会显示这个ANR对话框。比如,如果一个应用因为IO操作而阻塞(通常是访问网络),那么应用的主线程就不能处理用户输入的事件。一段时间后,系统推测出该应用已经“僵死”,那么就会显示这个ANR对话框来给用户关闭这个应用的选择。 类似的,如果你的应用花费大量的时间在内存中构建一个复杂的数据结构,或者可能是计算游戏中的下一个移动点

Android最佳实践之响应灵敏性

一笑奈何 提交于 2020-01-24 03:44:29
可能会存在这样的情况,你写的代码通过了世界上所有的性能测试,但当用户尝试使用你的应用程序时,仍然让用户感到不爽。应用程序响应不够灵敏的地方包括——反映迟钝,挂起或冻结很长时间,或者需要花费很长的时间来处理输入。 在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。 一般说来,如果应用程序不能响应用户输入的话,系统会显示一个ANR。例如,一个应用程序阻塞在一些I/O操作上(通常是网络访问),这时,应用程序的主线程就不能再处理用户的输入事件。经过一定的时间后,系统认为应用程序已经挂起,并显示ANR来让用户选择杀死应用程序。 相似地,如果你的应用程序花费太多的时间来构建详细的内存结构,或者也许是在游戏里花费太多时间来计算下一步移动,这时,系统会认为你的应用程序已经挂起。因此,确保这些计算是高效的往往很重要,但即使是最高效的代码仍然需要花费时间来运行。 在这两种情况下,解决的方法通常是创建一个子线程,然后在线程里做你的大部分工作。这能让主线程(驱动UI事件循环)保持运行

Android 代码优化点滴

天大地大妈咪最大 提交于 2020-01-23 02:13:01
MVC 模型:Mode,View,Controller与view相关的类:DragLayer (自定义的帧布局DragLayer 包含hotseat ,workspace ,和DragController , DragListener 等一起使得桌面上的shortcut具备拖动功能,和DropTarget一起具备删除功能 桌面拖动,删除的处理:将workspace 和DragLayer通过一些接口:DropTarget, DragSource, DragScroller配套完成,DragLayer 和DragController 操纵以上接口类,在workspace 去实现具体)àworkspace(自定义的类似pageview,自己可以snapToPage,即可在不同的cellLayout之间切换,同时实现拖动,触摸等接口,做具体的动作)à cellLayout(默认一个workspace 包含两个cellLayout,可以增加,删除 )à ShortcutAndWidgetContainer(在cellLayout 中,真正是它来确定桌面上的Shortcut 的位置,大小等)à (ShortcutInfo,FolderInfo) 与Mode 相关的类:LauncherProvider 提供和数据库直接操作相关的接口,LauncherModel 非UI线程(后台线程

并发编程的理论基石

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

敲黑板,做笔记!金三银四时去面试,这几个重要的面试题千万别忘记!

二次信任 提交于 2020-01-15 00:54:53
快春节了,又到了令人兴奋的年终奖环节了,而程序员的年终奖,往往令人羡慕 做了个盘点:互联网大厂的年终奖vs我们的年终奖,真酸!换个公司还来得及吗? 大厂程序员的年终奖,实在令人羡慕! 但是不能光羡慕啊,马上就到金三银四了,面试的黄金时节,还不准备起来。 有可能,2020年底你也有了呢。 BATJ、字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等已经上传到了的我的GitHub 大家点击我的GitHub地址: https://github.com/Meng997998/AndroidJX 点下star一起学习 下面就来讲讲Android面试中很重要的面试题 说一下java多态的理解,以及接继承,和接口的理解 对于多态的定义 不同类的对象对统一函数做出不同对的响应或者动作。 作用 主要是消除类之间的耦合性,灵活性比较强,利于代码的编写和修改。尤其在处理大量的运算和操作时,可以灵活地简化,替换或者是修改代码! 三个必要条件 1、一个凳子(继承extends) 2、重写 3、父类引用指向子类对象 for example **测试结果: oKhttp的 原理 1.同步和异步: 1.异步使用了Dispatcher来将存储在 Deque 中的请求分派给线程池中各个线程执行。 2

Android中的线程池

寵の児 提交于 2020-01-15 00:20:53
线程池的好处: 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销 能有效控制线程池的最大并发数,避免大量线程之间因互相抢占系统资源而导致的阻塞现象 能够对线程进行简单的管理,并能提供定时执行以及指定间隔循环执行等功能 Android中的线程池概念来源于Java中Executor.Exeuctor是一个接口,它的真正实现是ThreadPoolExecutor,它提供了一系列参数来配置线程池,通过不同的参数可以创建不同的线程池 ThreadPoolExecutor的构造函数: public ThreadPoolExecutor ( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue ThreadFactory threadFactory) { } 参数说明: corePoolSize:线程池中的核心线程数,默认情况下,核心线程会在线程池中一直存活,即时它们处于闲置状态。如果将ThreadPoolExecutor的allowCoreThreadTimeOut属性设置为true,那么他将执行超时策略,由我们指定超时时间,超过这个时间,该线程就会被终止 maximumPoolSize:线程池中所能容纳的最大线程数