一.AsyncTask异步处理的原理
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后会把执行的进度和最终结果传递给主线程并更新UI
AsyncTask本身是一个抽象类它提供了Params、Progress、Result 三个泛型参数,其类声明如下:
public abstract class AsyncTask<Params, Progress, Result> {
- 1
由类声明可以看出AsyncTask抽象类确实定义了三种泛型类型 Params,Progress和Result,它们分别含义如下:
- Params :启动任务执行的输入参数,如HTTP请求的URL
- Progress : 后台任务执行的百分比
- Result :后台执行任务最终返回的结果类型
https://blog.youkuaiyun.com/javazejian/article/details/52462830
二.Android是如何访问网络的
使用HttpURLConnection访问网络
先创建一个URL,然后传入网络地址,紧接着调用url的openConnection()方法URL url = new URL("https://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
设置http请求的方式以及设置连接超时等信息
connection.setRequestMethod("GET");
connection.setConnectTimeout(80000);
connection.setReadTimeout(8000);
使用getInputStream获取服务器返回的输入流
InputStream stresm = connection.getInputStream();
在得到服务器返回的输入流之后我们就要对输入流进行读取
BufferedReader reader = new BufferedReader(new InputStreamReader(stresm));
对输入流读取完毕之后我们就开始读取存放在reader当中的字符串
StringBuilder response = new StringBuilder();
String line;
while ((line=reader.readLine()) != null){
response.append(line);
}
三.RecyclerView是如何实现上拉加载和下拉刷新的
刷新操作(重新请求数据)完成后要回调来停止隐藏刷新动画(中上方圆形悬浮进度条旋转动画)
四.回调函数
回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机
五.重写和重载的区别
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
六.静态内部类和局部内部类的定义和区别
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
七.Fragment和Activity之间是如何传输数据的
Activity-->Fragment、Fragment-->Fragment:Bundle
Fragment-->Activity:在Fragment中定义一个内部回调接口,再在实现改Fragment的Activity实现该回调接口
八.简述ContentProvider及其作用
ContentProvider,内容提供者。是Android的四大组件之一,以数据库的形式存入手机,可以共享自己的数据给其他应用使用,相对于其他对外共享数据方式而言,ContentProvider统一了数据访问方式,使用起来更规范。
九.Android中动画类型以及区别
Android 中的动画有帧动画,补间动画,属性动画
###帧动画
> 一张张图片不断的切换,形成动画效果
###补间动画
* 原形态变成新形态时为了过渡变形过程,生成的动画就叫补间动画
* 位移、旋转、缩放、透明
#属性动画
* 补间动画,只是一个动画效果,组件其实还在原来的位置上,xy没有改变
十.java中向上转型和向下转型
子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口
十一.什么是枚举类
简单的说就是自定义参数类型
public enum SeasonEnum { SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); }十二.java中观察者模式
十三.java中单例模式
java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。
单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
十四.Get和Post的区别
十五.Android的架构
从上层到底层共包括四层,分别是应用程序程序层、应用框架层、系统库和Android运行时和Linux内核。
一 应用程序层
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。
二 应用程序框架层
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道
三 系统库和Android运行时
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc
四 Linux内核
Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型
十六.简述Android的五种布局
FrameLayout(帧布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)
FrameLayout: 从屏幕的左上角开始布局,叠加显示, 实际应用 播放器的暂停按钮.
LinearLayout:线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局
AbsoluteLayout:绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置
RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:
相对于某一个元素
TableLayout :<table>表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素
十七.Android系统怎么样,优缺点
Android平台手机 5大优势:
一、开放性
二、挣脱运营商的束缚
三、丰富的硬件选择
四、不受任何限制的开发商
五、无缝结合的Google应用
Android的5大不足:
一、安全和隐私
二、首先开卖Android手机的不是最大运营商
三、运营商仍然能够影响到Android手机
四、同类机型用户减少
五、过分依赖开发商缺少标准配置
序列化是将对象状态转换为可保持或传输的格式的过程。说明白点就是你可以用对象输出流输出到文件。
实现方式是实现jSerializable接口。
十九.Android出现Force Close的原因,如何避免
导致出现Force Close的原因有很多,常见的有比如空指针啦,类没有找到啦,资源没找到,就连Android API使用的顺序错误也可能导致(比如setContentView()之前进行了findViewById()操作)
Force Close有的人说可以用来让应用完全退出 而故意导致这个问题,让程序强制关闭,这种做法我还是不常用。
可以实现Thread.UncaughtExceptionHandler接口的uncaughtException方法。再补充一句,想要哪个线程可以处理未捕获异常,Thread.setDefaultUncaughtExceptionHandler( this); 这句代码都要在那个线程中执行一次
在uncaughtException方法中,第一个参数是线程,第二个参数是异常。
成功捕获到了异常,而且activity也退出了,可是并不是安全退出,因为当你再次点击打开apk时,发现程序无响应。
为了解决上述问题,我在uncaughtException方法里将进程杀死,杀死进程有好多中方法,
二十.Android中Service怎么开启,怎么关闭启动service有两种方法:
1、 Context.startService()
调用者与服务之间没有关联,即使调用者退出,服务仍可运行
2、 Context.bindService()
调用者与服务绑定在一起,调用者一旦退出,服务也就终止
@Override
protected void onStop() {
unregisterReceiver(dateReceiver);// 取消注册Broadcast Receiver
super.onStop();
}
二十一.简述Intent、Intent filter、broadcast、BroadcastReceiver、Activity
IntentFilter就是用于描述intent的各种属性, 比如action, category等
二十二.Android下数据存储方式
Android本身的数据库:SQLite数据库
ShardPreferences
文件存储,数据以 I/O 流的形式把数据存入手机内存或者手机SD卡
ContentProvider,内容提供者。是Android的四大组件之一,以数据库的形式存入手机,可以共享自己的数据给其他应用使用,相对于其他对外共享数据方式而言,ContentProvider统一了数据访问方式,使用起来更规范。
网络存储,把数据存储到服务器,不存储在本地,使用的时候直接从网络获取,避免了手机端信息丢失以及其他安全隐患。
二十三.java中泛型
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
二十四.Android系统上安装了多种浏览器,能否指定浏览器访问指定页面
Intent intent =newIntent();
intent.setAction("android.intent.action.VIEW");
Uri content_url =Uri.parse("http://www.163.com");
intent.setData(content_url);
intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(intent);
二十五.Android垃圾回收机制