1.Android各版本API区别?

https://blog.csdn.net/andypan1314/article/details/6583563(转)

2.Requestlayout,onlayout,onDraw,DrawChild区别与联系

requestLayout()方法 :会导致调用measure()过程 和 layout()过程 。 说明:只是对View树重新布局layout过程包括measure()和layout()过程,不会调用draw()过程,但不会重新绘制 任何视图包括该调用者本身。

onLayout()方法(如果该View是ViewGroup对象,需要实现该方法,对每个子视图进行布局)

调用onDraw()方法绘制视图本身 (每个View都需要重载该方法,ViewGroup不需要实现该方法)

drawChild()去重新回调每个子视图的draw()方法

https://blog.csdn.net/weixin_41101173/article/details/79726311(转)

3.invalidate和postInvalidate的区别及使用

https://www.jianshu.com/p/e147f381190c(转)

4.Activity-Window-View三者的差别?

https://juejin.im/entry/596329686fb9a06bc903b6fd

5.谈谈对Volley的理解?

https://www.jianshu.com/p/a35afb377d7f

6.如何优化自定义view?

http://hukai.me/android-training-course-in-chinese/ui/custom-view/optimize-view.html(官方文档)

7.低版本SDK如何实现高版本API?

https://www.cnblogs.com/yaowen/p/5732614.html

8.描述一次网络请求的流程?

https://blog.csdn.net/SEU_Calvin/article/details/53304406

https://www.jianshu.com/p/f184b8cee0a4

9.网络请求框架的对比?

https://www.jianshu.com/p/2fa728c8b366

https://blog.csdn.net/zxm317122667/article/details/53234556

10.Looper架构?

https://blog.csdn.net/hengqiaqia/article/details/78335239

11.Android源码:AMS、PMS、WMS原理分析

https://blog.csdn.net/shareus/article/details/51174623

12.自定义view如何考虑机型适配

  • 合理使用warp_content,match_parent.
  • 尽可能的是使用RelativeLayout
  • 针对不同的机型,使用不同的布局文件放在对应的目录下,android会自动匹配。
  • 尽量使用点9图片。
  • 使用与密度无关的像素单位dp,sp
  • 引入android的百分比布局。
  • 切图的时候切大分辨率的图,应用到布局当中。在小分辨率的手机上也会有很好的显示效果

13.Android中AsyncTask详解?

https://blog.csdn.net/iispring/article/details/50639090

14.SpareArray原理?

在Android开发中如果使用key为Integer的HashMap,就会出现黄色警告,提示使用SparseArray,SparseArray具有比HashMap更高的内存使用效率,HashMap的存储方式是数组加链表,SparseArray是使用纯数组的形式存储,SparseArray采用时间换取空间的方式来提高手机App的运行效率,这也是其与HashMap的区别;HashMap通过空间换取时间,查找迅速;HashMap中当table数组中内容达到总容量0.75时,则扩展为当前容量的两倍

  • SparseArray的key为int,value为Object。
  • 在Android中,数据长度小于千时,用于替换HashMap
  • 相比与HashMap,其采用 时间换空间 的方式,使用更少的内存来提高手机APP的运行效率(HashMap中当table数组中内容达到总容量0.75时,则扩展为当前容量的两倍

https://blog.csdn.net/xiaxl/article/details/77267201

15.ContentProvider是如何实现数据共享的?

当一个应用程序需要把自己的数据暴露给其他程序使用时,该就用程序就可通过提供ContentProvider来实现;其他应用程序就可通过ContentResolver来操作ContentProvider暴露的数据。
一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管该应用程序是否启动,其他应用程序都可以通过该接口来操作该应用程序的内部数据,包括增加数据、删除数据、修改数据、查询数据等。
ContentProvider以某种Uri的形式对外提供数据,允许其他应用访问或修改数据;其他应用程序使用ContentResolver根据Uri去访问操作指定数据。
步骤:
1、定义自己的ContentProvider类,该类需要继承Android提供的ContentProvider基类。
2、在AndroidManifest.xml文件中注册个ContentProvider,注册ContenProvider时需要为它绑定一个URL。
例:

说明:authorities就相当于为该ContentProvider指定URL。
注册后,其他应用程序就可以通过该Uri来访问MyProvider所暴露的数据了。
接下来,使用ContentResolver操作数据,Context提供了如下方法来获取ContentResolver对象。
一般来说,ContentProvider是单例模式,当多个应用程序通过ContentResolver来操作 ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentProvider处理。
使用ContentResolver操作数据只需两步:
1、调用Activity的ContentResolver获取ContentResolver对象。
2、根据需要调用ContentResolver的insert()、delete()、update()和query()方法操作数据即可

16.Activity与Service通信有哪几种方式?

(1)通过Binder对象

(2)通过Broadcast广播形式

(3)通过接口

(4)通过Intent

17.IntentService原理及其使用?

用IntentService有什么好处呢?首先,我们省去了在Service中手动开线程的麻烦,第二,当操作完成时,我们不用手动停止Service,第三,使用操作方便

https://blog.csdn.net/ryantang03/article/details/8146154

18.说说Activity,Intent,Service之间的关系?

一个 Activity 通常是一个单独的屏幕,

每一个 Activity 都被实现为一个单独的类,

这些类都 是从 Activity 基类中继承来的,

Activity 类会显示由视图控件组成的用户接口,

并对视图控 件的事件做出响应。 

Intent 的调用是用来进行架构屏幕之间的切换的。

Intent 是描述应用想要做什么。

Intent 数 据结构中两个最重要的部分是动作和动作 对应的数据,

一个动作对应一个动作数据。

Android Service 是运行在后台的代码,

不能与用户交互,可以运行在自己的进程,也可以 运行在其他应用程序进程的上下文里。

需要通过某一个 Activity 或者其他 Context 对象来调 用。 

Activity 跳转到 Activity,Activity 启动 Service,Service 打开 Activity 

都需要 Intent 表明跳转 的意图,以及传递参数,Intent 是这些组件间信号传递的承载者。 

19.Application Context和Activity Context的区别

1.Application的Context是一个全局静态变量,SDK的说明是只有当你引用这个context的生命周期超过了当前activity的生命周期,而和整个应用的生命周期挂钩时,才去使用这个application的context。一种推荐的用法就是应用程序注册广播broadcast时,使用这个context。引用application context并不会导致内存泄漏。引用activity的context才会导致内存泄漏,当你的引用对象的生命周期超过了当前activity的生命周期时,系统回收你的activity时发现还有一个context的强引用,而不去销毁这个activity,导致内存泄漏,在开发过程中,需要非常重视这点(一个全局静态变量在引用context时一定要使用application的Context, 而不要使用activity的)2.在android中context可以作很多操作,但是最主要的功能是加载和访问资源。在android中有两种context,
一种是 application context,
一种是activity context,通常我们在各种类和方法间传递的是activity context。
 比如一个activity的onCreate: 
protected void onCreate(Bundle state) {
   super.onCreate(state); 
   TextView label = newTextView(this); //传递context给view control label.setText("Leaks are bad");   setContentView(label);
把activity context传递给view,意味着view拥有一个指向activity的引用,进而引用activity占有的资源:view hierachy,resource等。
 这样如果context发生内存泄露的话,就会泄露很多内存。 这里泄露的意思是gc没有办法回收activity的内存。 Leaking an entire activity是很容易的一件事。 当屏幕旋转的时候,系统会销毁当前的activity,保存状态信息,再创建一个新的。 比如我们写了一个应用程序,它需要加载一个很大的图片,我们不希望每次旋转屏 幕的时候都销毁这个图片,重新加载。实现这个要求的简单想法就是定义一个静态的Drawable,这样Activity 类创建销毁它始终保存在内存中。 实现类似: public class myactivity extends Activity { private static Drawable sBackground; protected voidonCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText("Leaks are bad"); if (sBackground == null) { sBackground = getDrawable(R.drawable.large_bitmap); } label.setBackgroundDrawable(sBackground);//drawable attached to a view setContentView(label); } } 
这段程序看起来很简单,但是却问题很大。当屏幕旋转的时候会有leak(即gc没法销毁activity)。 我们刚才说过,屏幕旋转的时候系统会销毁当前的activity。但是当drawable和view关联后,drawable保存了view的 reference,即sBackground保存了label的引用,而label保存了activity的引用。既然drawable不能销毁,它所引用和间接引用的都不能销毁,这样系统就没有办法销毁当前的activity,于是造成了内存泄露。gc对这种类型的内存泄露是无能为力的。 避免这种内存泄露的方法是避免activity中的任何对象的生命周期长过activity,避免由于对象对 activity的引用导致activity不能正常被销毁,我们可以使用application context。
application context伴随application的一生,与activity的生命周期无关。
application context可以通过Context.getApplicationContext或者Activity.getApplication方法获取。 避免context相关的内存泄露,记住以下几点: 
(1). 不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的 
(2). 对于生命周期长的对象,可以使用application context 
(3). 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化

20.SP是进程同步吗?有什么办法可以让他同步?

1. SharedPreferences不支持进程同步

一个进程的情况,经常采用SharePreference来做,但是SharePreference不支持多进程,它基于单个文件的,默认是没有考虑同步互斥,而且,APP对SP对象做了缓存,不好互斥同步.

MODE_MULTI_PROCESS的作用是什么?

在getSharedPreferences的时候, 会强制让SP进行一次读取操作,从而保证数据是最新的. 但是若频繁多进程进行读写 . 若某个进程持有了一个外部sp对象, 那么不能保证数据是最新的. 因为刚刚被别的进程更新了.

2.考虑用ContentProvider来实现SharedPreferences的进程同步.

ContentProvider基于Binder,不存在进程间互斥问题,对于同步,也做了很好的封装,不需要开发者额外实现。 

另外ContentProvider的每次操作都会重新getSP. 保证了sp的一致性.

21.Android中多线程的使用?

https://blog.csdn.net/a992036795/article/details/51362487

22.进程和应用的生命周期?

https://blog.csdn.net/timshinlee/article/details/73770821

23.RecycleView原理

https://blog.csdn.net/xyh269/article/details/53047855

24.AndroidMainfest的作用与理解

https://www.cnblogs.com/-OYK/archive/2011/05/31/2064818.html

更多相关文章

  1. Android(安卓)application对象的使用 全局变量
  2. Android中sqllite存储海量数据解决办法
  3. Android的蓝牙串口(Bluetooth SPP)使用
  4. Android(安卓)SQLiteOpenHelper的使用心得
  5. Android写入配置信息
  6. Android页面之间进行数据回传
  7. Android之数据存储笔记
  8. android开发学习笔记(一)分别通过GET和POST请求从服务器端获取数
  9. Android联系人自动过滤并显示“新建联系人”

随机推荐

  1. Android上下文对象Context
  2. Android开源框架源码鉴赏:Okhttp
  3. C4droid – a C compiler for Android
  4. Android(安卓)学习 笔记_09. WIFI网络操
  5. Android universal-Image-Loader原理详解
  6. Android, I am back.
  7. Android震动实现
  8. android studio 获取sha1和md5值
  9. 2011.06.09——— android 1.6 launcher
  10. Android在做webview与js交互,线程变化以及