前台就是和用户交互的进程

可见进程例如一个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调起,一定要配置下面这句

  1. <category android:name="android.intent.category.BROWSABLE"></category>
    1. android:scheme="app"表示配置接受的协议为app,相当于http://www.baidu.com中的http或者https  
      1. android:host="test"表示配置接受的域名为test,相当于http://www.baidu.com中的www.baidu.com
      2. 2、使用URL调起Activity
        1. Uri uri=Uri.parse("app://test");
        2. Intent intent=new Intent(Intent.ACTION_VIEW,uri);
        3. startActivity(intent);  3、使用js调起Activity
          1. window.location = "app://test";
          2. 通过推送,接受到需要打开的url

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

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面试详解的更多相关文章

  1. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  2. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  3. Android ActionBar详解

    Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar   目录(?)[+]   第4 ...

  4. Android 签名详解

    Android 签名详解 AndroidOPhoneAnt设计模式Eclipse  在Android 系统中,所有安装 到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程 ...

  5. Android编译系统详解(一)

    ++++++++++++++++++++++++++++++++++++++++++ 本文系本站原创,欢迎转载! 转载请注明出处: http://blog.csdn.net/mr_raptor/art ...

  6. Android布局详解之一:FrameLayout

      原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...

  7. 【整理修订】Android.mk详解

    Android.mk详解 1. Android.mk 的应用范围 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 一个Android.mk文件可以编 ...

  8. Android菜单详解(四)——使用上下文菜单ContextMenu

    之前在<Android菜单详解(二)——创建并响应选项菜单>和<Android菜单详解(三)——SubMenu和IconMenu>中详细讲解了选项菜单,子菜单和图标菜单.今天接 ...

  9. Android签名详解(debug和release)

    Android签名详解(debug和release)   1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包 ...

随机推荐

  1. Java实现 蓝桥杯VIP 算法提高 邮票面值设计

    算法提高 邮票面值设计 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮 ...

  2. Java实现 蓝桥杯VIP 算法提高 洗牌

    算法提高 洗牌 时间限制:1.0s 内存限制:256.0MB 问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌.虽然小弱T不怎么会洗牌,但是他却总是输. 渐渐地小弱T发现了一个规律:只要 ...

  3. Java实现 LeetCode 73 矩阵置零

    73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ...

  4. PAT 统计同成绩学生

    本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔 ...

  5. DMR windows 软件x64

    解压缩以后,默认使用串口4的USB热点板,用notepad2软件修改MMDVM.ini的呼号,ID,频率,串口号保存在打开DMR.bat即可,晶体有偏移的运行DMR500.bat https://sh ...

  6. Django如何上传图片并对上传图片进行访问

    通过一个示例的完整演示过程,来学习django如何上传图片,以及对于media文件夹中的上传图片进行请求: 1.配置settings.py MEDIA_URL = '/media/' MEDIA_RO ...

  7. 上位机开发之西门子PLC-S7通信实践

    写在前面: 就目前而言,在中国的工控市场上,西门子仍然占了很大的份额,因此对于上位机开发而言,经常会存在需要与西门子PLC进行通信的情况.然后对于西门子PLC来说,通信方式有很多,下面简单列举一下: ...

  8. POJ - 2184 Cow Exhibition 题解

    题目大意 有 \(N(N \le 100)\) 头奶牛,没有头奶牛有两个属性 \(s_i\) 和 \(f_i\),两个范围均为 \([-1000, 1000]\). 从中挑选若干头牛,\(TS = \ ...

  9. 京东商品 + selenium

    from selenium import webdriver import time from selenium.webdriver.common.keys import Keys bro=webdr ...

  10. 微信小程序实现连续扫码功能(uniapp)

    注:本文使用的是 uniapp 语法. 微信小程序提供了扫码API:wx.scanCode,但它只能扫一次码,想要实现连续扫码,需要借用 camera 组件.camera 组件不仅能拍照,还具有扫码功 ...