android面试详解


前台就是和用户交互的进程
可见进程例如一个activity被一个透明的对话框覆盖,该activity就是可见进程
服务:service进程
后台一个activity按了home按键就是从前台退回到后台

标准模式:不管任务栈是否存在相同的activity都会创建一个新的activity存储在任务栈中

Singletop栈顶复用模式创建的activity在栈顶就不用创建该activity
站内复用模式:只要任务栈内存在该activity,就不用创建该activity,将该activity置于栈顶,该activity以上的activity都从任务栈中移除销毁掉出去,会回调onnewIntent方法

最近由于工作需要,使用Scheme方式自定义URL来跨应用间调用,踩了一些坑,现在记录一下。
1、Scheme方式配置
manifest中配置能接受Scheme方式启动的activity
最近由于工作需要,使用Scheme方式自定义URL来跨应用间调用,踩了一些坑,现在记录一下。
1、Scheme方式配置
manifest中配置能接受Scheme方式启动的activity
如果需要配置能被js调起,一定要配置下面这句
- <category android:name="android.intent.category.BROWSABLE"></category>
- android:scheme="app"表示配置接受的协议为app,相当于http://www.baidu.com中的http或者https
- android:host="test"表示配置接受的域名为test,相当于http://www.baidu.com中的www.baidu.com
- 2、使用URL调起Activity
- Uri uri=Uri.parse("app://test");
- Intent intent=new Intent(Intent.ACTION_VIEW,uri);
- startActivity(intent); 3、使用js调起Activity
- window.location = "app://test";
- 通过推送,接受到需要打开的url
- android:scheme="app"表示配置接受的协议为app,相当于http://www.baidu.com中的http或者https


前者适合页面较少,并没有实现真正的内存回收,后者适合页面较多实现了内存真正的回收

fragment调用activity的方法,直接获得getactivity进行调用
activity调用fragement的方法,在fragment中实现接口,在activity中调用接口对象
fragment A调用fragment B的方法,通过getactivity的的findFragment进行调用

service和broadcast都是运行在主线程上,如果service要做耗时操作,可以开启线程的方式,列如在service中访问网络都需要开启线程

Service 中的onStartCommand()必须返回一个整数.这个整数描述了在系统杀死它的事件中系统如何继续这个服务onStartCommand()也返回值必须是下面常量之一:
START_NOT_STICKY
如果系统在onStartCommand()返回后杀死了服务,不要重新创建这个service,除非还有挂起的intent需要被传送.这是避免在不必要时运行你的service和当你的应用可以简单重启任何未竟的工作时的最佳选择.
START_STICKY
如果系统在onStartCommand()返回后杀死了这个service,会重新创建这个service并且调用onStartCommand(),但是不再重新发送上次最后一个intent,而是使用一个nullintent调用onStartCommand(),除非有一些挂起的intent,在此情况下,这些挂起的intent被派送.这适合于媒体播放器(or或相似也的服务),它不执行命令,但是无限期的运行并等待一个工作.
START_REDELIVER_INTENT
如果系统在onStartCommand()返回后杀死了service,重新创建这个service并且使用上次最后一个intent调用onStartCommand().任何挂起的intent都顺序地被派送.这适合于活跃地执行一个工作并且应被立即恢复的服务,比如下载一个文件


在service中发送广播通知activity,不让service和activity直接交互

同一一个app不同组件的通信



动态注册一定要在activity的ondestory中销毁,否则会内存泄露
动态注册的声明周期和activity一样,activity销毁广播就销毁
静态注册即使activity销毁了,也能收到广播



binder比传统的进程的上面更加高效,binder能够进行身份的安全性检查




在生成handle对象的时候,每一个线程拥有自己的创建了threadLocal对象一个loop对象和一个消息队列,主线程才能更新UI,handler的创建必须在主线程中,looper从消息队列中获得消息,然后由handle来发送,有handle的
hanleMessage方法来处理,处理完成之后返回给Loper继续执行,在取出消息队列

解决handle内存泄露的问题
第一讲handle定义成static类型
第二在activity的ondestory中调用handle.removecall方法
第三:采用弱引用的访问在handle内部持有activity的对象

通过上面的三种方式,能百分之90%解决handle的内存泄露


总结:
View绘制分三个步骤,顺序是:onMeasure,onLayout,onDraw。经代码亲测,log输出显示:调用invalidate方法只会执行onDraw方法;调用requestLayout方法只会执行onMeasure方法和onLayout方法,并不会执行onDraw方法。
所以当我们进行View更新时,若仅View的显示内容发生改变且新显示内容不影响View的大小、位置,则只需调用invalidate方法;若View宽高、位置发生改变且显示内容不变,只需调用requestLayout方法;若两者均发生改变,则需调用两者,按照View的绘制流程,推荐先调用requestLayout方法再调用invalidate方法。
相关知识点:
1.invalidate和postInvalidate:invalidate方法只能用于UI线程中,在非UI线程中,可直接使用postInvalidate方法,这样就省去使用handler的烦恼。


android面试详解的更多相关文章
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Android ActionBar详解
Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar 目录(?)[+] 第4 ...
- Android 签名详解
Android 签名详解 AndroidOPhoneAnt设计模式Eclipse 在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...
- Android编译系统详解(一)
++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...
- Android布局详解之一:FrameLayout
原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...
- 【整理修订】Android.mk详解
Android.mk详解 1. Android.mk 的应用范围 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 一个Android.mk文件可以编 ...
- Android菜单详解(四)——使用上下文菜单ContextMenu
之前在<Android菜单详解(二)——创建并响应选项菜单>和<Android菜单详解(三)——SubMenu和IconMenu>中详细讲解了选项菜单,子菜单和图标菜单.今天接 ...
- Android签名详解(debug和release)
Android签名详解(debug和release) 1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包 ...
随机推荐
- Map接口之HashMap,LinkedHashMap,TreeMap
Map与Collection 并列存在,用于保存具有映射关系的数据:Key-Value Map中的Key和Value都可以是任何引用类型的数据 Map中的Key用Set存放,不允许重复,即同一个Map ...
- 服务器ip地址 服务器ip登录方法
服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器.其中域名必须对应一个IP地址,一个域名可以有多个IP地址,而IP地址不一定有域名. 简单的解释就是:服 ...
- 脚本:Tomcat日志切割
Tomcat日志切割脚本 #!/bin/bash #Tomcat日志切割 Tomcat_logs_path=/data/server/tomcat-8080/logs d=`date +%F` d7= ...
- Rocket - debug - Example: Accessing Registers Using Abstract Command
https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using ...
- Java IO实现文件(及文件夹)的复制 原创代码【精】
单个文件复制 FileInputStream input=new FileInputStream("C://360//fay.jpg"); FileOutputStream out ...
- Java实现 蓝桥杯VIP 算法训练 矩阵加法
时间限制:1.0s 内存限制:512.0MB 问题描述 给定两个N×M的矩阵,计算其和.其中: N和M大于等于1且小于等于100,矩阵元素的绝对值不超过1000. 输入格式 输入数据的第一行包含两个整 ...
- Java实现WUST 1002: 哈夫曼树
[问题描述] 根据给定的若干权值可以构造出一颗哈夫曼树.构造的哈夫曼树可能不唯一,但是按照下面的选取原则所构造出来的哈夫曼树应该是唯一的. (1)每次选取优先级最低的两个结点,优先级最低的作为左子树, ...
- Java实现第八届蓝桥杯外星日历
外星日历 题目描述 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历.日历只有天数,没有年.月的概念. 有趣的是,他们也使用了类似"星期"的概念, 只不过他 ...
- java实现第六届蓝桥杯显示二叉树
显示二叉树 题目描述 排序二叉树的特征是: 某个节点的左子树的所有节点值都不大于本节点值. 某个节点的右子树的所有节点值都不小于本节点值. 为了能形象地观察二叉树的建立过程,小明写了一段程序来显示出二 ...
- java实现第九届蓝桥杯最大乘积
最大乘积 把 1~9 这9个数字分成两组,中间插入乘号, 有的时候,它们的乘积也只包含1~9这9个数字,而且每个数字只出现1次. 比如: 984672 * 351 = 345619872 98751 ...