Android
文章平均质量分 79
Warden032
这个作者很懒,什么都没留下…
展开
-
Android应用内存泄露分析、改善经验总结
原则 对于性能问题,分析和改善有必要遵循以下原则:一切看数据说话,不能跟着感觉走,感觉哪有问题就去改,很有可能会适得其反;性能优化是一个持续的过程,需要不断地改善,不要想着一气呵成;对于性能问题,不一定必须要改善,受限于架构或者其它原因某些问题可能会很难改善,必须要先保证能用,再才考虑好用。改善后一定要验证,任何一个地方的改动都需要验证,避免因为改善性能问转载 2016-07-08 14:55:41 · 700 阅读 · 0 评论 -
android 插件Activity生命周期管理
在Java平台要做到动态运行模块、热插拔可以使用ClassLoader技术进行动态类加载,比如广泛使用的OSGi技术。在Android上当然也可以使用动态加载技术,但是仅仅把类加载进来就足够了吗?Activity,Service等组件是有生命周期的,它们统一由系统服务AMS管理;使用ClassLoader可以从插件中创建Activity对象,但是,一个没有生命周期的Activity对象有什么用?所转载 2016-07-18 18:59:20 · 1013 阅读 · 0 评论 -
android 插件加载机制
上文 Activity生命周期管理 中我们地完成了『启动没有在AndroidManifest.xml中显式声明的Activity』的任务;通过Hook AMS和拦截ActivityThread中H类对于组件调度我们成功地绕过了AndroidMAnifest.xml的限制。但是我们启动的『没有在AndroidManifet.xml中显式声明』的Activity和宿主程序存在于同一个Apk中;通常转载 2016-07-18 19:00:47 · 699 阅读 · 0 评论 -
插件之广播管理
相比Activity,BroadcastReceiver要简单很多——广播的生命周期相当简单;如果希望插件能够支持广播,这意味着什么?回想一下我们日常开发的时候是如何使用BroadcastReceiver的:注册, 发送和接收;因此,要实现BroadcastReceiver的插件化就这三种操作提供支持;接下来我们将一步步完成这个过程。阅读本文之前,可以先clone一份 understand转载 2016-07-19 18:07:12 · 595 阅读 · 0 评论 -
插件之ContentProvider的管理
与Activity,BroadcastReceiver等频繁被使用的组件不同,我们接触和使用ContentProvider的机会要少得多;但是,ContentProvider这个组件对于Android系统有着特别重要的作用——作为一种极其方便的数据共享的手段,ContentProvider使得广大第三方App能够在壁垒森严的系统中自由呼吸。在Android系统中,每一个应用程序都有自己的用户I转载 2016-07-19 18:10:28 · 711 阅读 · 0 评论 -
Android Studio调试技巧
写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 Evaluate Expression, 知道条件断点;可是你听说过日志断点吗,Method Breakpoint, Exception Breakpoint 呢?还有高大上的 Field Watchpoint ?几种不同的断点你有关转载 2016-07-20 16:55:04 · 338 阅读 · 0 评论 -
AsyncTask解析
虽说现在做网络请求有了Volley全家桶和OkHttp这样好用的库,但是在处理其他后台任务以及与UI交互上,还是需要用到AsyncTask。但是你真的了解AsyncTask吗?AsyncTask的实现几经修改,因此在不同版本的Android系统上表现各异;我相信,任何一个用户量上千万的产品绝对不会在代码里面使用系统原生的AsynTask,因为它蛋疼的兼容性以及极高的崩溃率实在让人不敢恭维。本文转载 2016-07-20 17:55:26 · 345 阅读 · 0 评论 -
Binder学习指南
Binder是Android系统中最重要的特性之一;正如其名“粘合剂”所喻,它是系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种及其方便的跨进程通信机制。理解Binder对于理解整个Android系统有着非常重要的作用,Android系统的四大组件,AMS,PMS等系统服务无一不与Binder挂钩;如果对Binder不甚了解,那么就很难了解这些系统机制,从而仅仅浮游与转载 2016-07-20 17:57:00 · 423 阅读 · 0 评论 -
android handler使用
Handler:是一个消息分发对象,进行发送和处理消息,并且其 Runnable 对象与一个线程的 MessageQueue 关联。作用:调度消息,将一个任务切换到某个指定的线程中去执行。为什么需要 Handler?子线程不允许访问 UI假若子线程允许访问 UI,则在多线程并发访问情况下,会使得 UI 控件处于不可预期的状态。传统解决办法:加锁,但会使得UI访问逻辑变的复杂,其转载 2016-08-05 19:36:36 · 865 阅读 · 0 评论 -
浅谈Service
直译过来,Service 就是服务。它跟 Activity 不同,没有界面,不直接与用户进行交互,是一个可以在后台长时间运行的应用组件。服务可以由其他应用组件来启动,也可以由系统来启动。当用户从你的应用切换到其他应用后,我们的服务仍然可以在后台继续运行,甚至有些情况下,你退出了应用,服务仍能继续运行。最典型的例子就是音乐播放器了,当你退出应用后,音乐还能继续播放。又比如钉钉和微信,只要你没有在系统转载 2016-08-10 15:59:55 · 1055 阅读 · 0 评论 -
Hook机制之AMS&PMS
在前面的文章中我们介绍了DroidPlugin的Hook机制,也就是代理方式和Binder Hook;插件框架通过AOP实现了插件使用和开发的透明性。在讲述DroidPlugin如何实现四大组件的插件化之前,有必要说明一下它对ActivityManagerServiche以及PackageManagerService的Hook方式(以下简称AMS,PMS)。ActivityManagerSer转载 2016-07-18 18:47:28 · 1952 阅读 · 0 评论 -
Android Hook机制之Binder Hook
Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等;这些广泛存在系统服务给应用程序提供了诸如任务管理,音频,视频等异常强大的功能。插件框架作为各个插件的管理者,为了使得插件能够无缝地使用这些系统服务,自然会对这些系统服务做出一定的改造(Hook),使得插件的开发转载 2016-07-18 18:45:53 · 594 阅读 · 0 评论 -
binder浅析
众所周知Binder 是Android中的一种跨进程通信方式,从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager,WindowManager等等)和相应ManagerService的桥梁;从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当是在不同的进程间通信时,服务端会返回一个bin转载 2016-07-15 15:43:53 · 374 阅读 · 0 评论 -
app优化方法
APP核心价值肯定是在于业务的,因此我们传统上对于性能优化的态度都是有余力的时候来关注,哪怕在《Android应用性能优化》一书中也讲到“代码优化应该最后去做,甚至完全可能不用去做。”在这样的思路下,我们对性能问题的发现和解决都是严重滞后的。然而从另外一个角度来看,越来越多数据表明,应用的性能对用户留存和活跃度都有很大影响(具体可以参考 Why You Should Care about转载 2016-07-15 15:49:43 · 644 阅读 · 0 评论 -
Android进程保活
一,背景 Android系统在APP退出后台时系统并不会真正杀掉这个进程,而是将其缓存起来以方便下次能快速启用。在系统内存不足的情况下,系统会依据一套Low Memory Killer机制来杀进程。 Linux内核会为每一个进程分配一个值,如下,这个值代表进程的优先级,值越大,代表进程优先级越低,那么就越容易被回收,Low Memory Killer就是根据这套机制转载 2016-07-15 17:28:22 · 536 阅读 · 0 评论 -
性能分析之内存优化
一,内存分析1,Java堆中各代的分布: 性能分析之内存 > image2016-5-22 14:11:43.png" src="http://doc.ucweb.local/download/attachments/236159046/image2016-5-22%2014%3A11%3A43.png?version=1&modificationDate=146389800700转载 2016-07-15 18:20:22 · 514 阅读 · 0 评论 -
Activity的创建过程分析
本文来自最近闲暇时查看android framework源码写的一篇文章,可能有错误之处,烦请各位大神指正。整个Activity的启动创建过程是通过ActivityThread完成的,首先看一下ActivityThread中的main方法:public static void main(String[] args) { SamplingProfilerIntegra转载 2016-07-15 18:46:13 · 633 阅读 · 0 评论 -
浅析Context
Context在我们实际开发中被广泛用到,比如 startActivity(…)/ getResources()/ getSharedPreferences(…)/getSystemService(.)等等;书中把Context理解为一个应用场景,一个Activity实例就是一个应用场景,一个Service实例也是一种应用场景,只是他木有前台界面而已;与Context相关类的继承关系如下:转载 2016-07-15 18:47:49 · 314 阅读 · 0 评论 -
Activity生命周期
生命周期图3种状态1、Resumed(running):运行状态Activity在屏幕前台显示,并且有用户焦点,可以操作。2、Paused:暂停状态被其他的部分透明的或者没有占全部屏幕的Activity覆盖,但是这个Activity还是可见的,存活的,它保留着所有的状态和成员信息,但用户不能操作,也不能执行任何代码。3、Stopped:停止状原创 2016-07-15 18:49:42 · 344 阅读 · 0 评论 -
android 构造匿名内部类
下面将分别按照 "什么是匿名内部类", "匿名内部类如何引起内存泄漏", "替代方案 -- 静态内部类", "替代方案 -- 动态代理" 四个部分来讲述,请耐心按顺序的读完.什么是匿名内部类匿名内部类,简单的说,就是没有明确指定名字的类。以下面的代码举例:public class MyActivity extends Activity { private int age转载 2016-07-18 18:26:11 · 679 阅读 · 0 评论 -
Android 插件之Hook机制动态代理
代理是什么为什么需要代理呢?其实这个代理与日常生活中的“代理”,“中介”差不多;比如你想海淘买东西,总不可能亲自飞到国外去购物吧,这时候我们使用第三方海淘服务比如惠惠购物助手等;同样拿购物为例,有时候第三方购物会有折扣比如当初的米折网,这时候我们可以少花点钱;当然有时候这个“代理”比较坑,坑我们的钱,坑我们的货。从这个例子可以看出来,代理可以实现方法增强,比如常用的日志,缓存等;也可以实现转载 2016-07-18 18:43:45 · 546 阅读 · 0 评论 -
安卓VIEW的绘制过程
这篇文章是结合自己对安卓view源码的分析以及别人写的一些关于view的博文写的一点总结,希望能得到大牛的指正。 在View绘制之前我们首先看一下整个Android UI的结构,这是一张整体框架图: 首先获取一个WindowManagerService即Wms,然后通过会话传递到ViewRoot,ViewRoot是一个继承Handler的类,该类负责View的处理逻辑,然后作用转载 2016-07-15 18:50:34 · 575 阅读 · 0 评论