Android基础
四大组件是什么
活动(Activity) 服务(Server) 广播(BroadcastReceiver) 内容提供者(ContentProvider)四大组件的生命周期
Activity:onCreate()、onStart()、onPuase()、onResume()、onstop()、onDestoty()、onRestart()
Server:onCreate()、onBind()(首次启动会调用前面这两个方法,再次启动就不会调用了)、onUnbind()、onDestoty()Activity之间的通信方式
Intent
借助类的静态变量
借助全局变量/Application
借助外部工具 :
– 借助SharedPreference
– 使用Android数据库SQLite
– 赤裸裸的使用File – Android剪切板
借助ServiceActivity各种情况下的生命周期
横竖屏切换的时候,Activity 各种情况下的生命周期
5.1 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
5.2 设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
5.3 设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法Activity与Fragment之间生命周期比较
Fragment:onAttach() onCreate() onCreateView() onActivityCreate() onstart() onResume() onPause() onStop() onDestoryView() onDestory() onDetach()Activity上有Dialog的时候按Home键时的生命周期
onSaveInstanceState –> onPause –> onStop onRestart –>onStart—>onResume两个Activity 之间跳转时必然会执行的是哪几个方法?
一般情况下比如说有两个activity,分别叫A,B。
当在A 里面激活B 组件的时候, A会调用onPause()方法,然后B调用onCreate() ,onStart(), onResume()。
这个时候B覆盖了A的窗体, A会调用onStop()方法。
如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。
如果B已经存在于Activity栈中,B就不会调用onCreate()方法。Activity的四种启动模式对比
standard:每次启动一个Activity都会重写创建一个新的实例,不管这个实例存不存在
singleTop:判断新的activity已经位于栈顶,那么这个Activity不会被重写创建,同时它的onNewIntent方法会被调用,通过此方法的参数我们可以去除当前请求的信息。如果栈顶不存在该Activity的实例,则情况与standard模式相同
singleTask:如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,并且会回调该实例的onNewIntent方法
singleInstance :该模式具备singleTask模式的所有特性外,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性,即整个系统中就这么一个实例,由于栈内复用的特性,后续的请求均不会创建新的Activity实例,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。Activity状态保存如何恢复
service和activity怎么进行数据交互?
Activity与Service之间的交互谈谈你对ContentProvider的理解
说说ContentProvider、ContentResolver、ContentObserver 之间的关系
请描述一下广播BroadcastReceiver的理解
在manifest 和代码中如何注册和使用BroadcastReceiver?
代码中使用广播(动态注册):
15.1 实现一个广播接收器,继承BroadcastReceiver,实现onReceive方法,在其中实现主要的逻辑。
15.2 使用IntentFilter()添加Action,注册广播。让广播接收器和IntentFilter绑定。registerReceiver
15.3 通过Intent发送一个广播消息本地广播和全局广播有什么差别?
BroadcastReceiver是针对应用间、应用与系统间、应用内部进行通信的一种方式
LocalBroadcastReceiver仅在自己的应用内发送接收广播,也就是只有自己的应用能收到,数据更加安全广播只在这个程序里,而且效率更高。LocalBroadcastReceiver不能静态注册,只能采用动态注册的方式。AlertDialog,popupWindow,Activity区别
Application 和 Activity 的 Context 对象的区别
Android属性动画特性
写一个回调demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27/**
* 回调接口
*
*/
public interface Callback {
public void execute(String s);
}
public class B {
public void Test(int n ,Callback callback) {
callback.execute("int转成String"+n);//进行回调
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
B b=new B();
b.Test(100 ,new Callback(){
public void execute(String s) {
// TODO Auto-generated method stub
System.out.println("实现回调");
System.out.println(s);
}});
}RecycleView的使用
RecyclerView 是一个增强版的ListView,不仅可以实现和ListView同样的效果,还优化了ListView中存在的各种不足之处
copy:
① RecyclerView封装了viewholder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。
② 提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecyclerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager等),也就是说RecyclerView不再拘泥于ListView的线性展示方式,它也可以实现GridView的效果等多种效果。你想控制Item的分隔线,可以通过继承RecyclerView的ItemDecoration这个类,然后针对自己的业务需求去抒写代码。
③ 可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecyclerView有其自己默认的实现。序列化的作用,以及Android两种序列化的区别
Serializable接口:
Parcelable接口:相比于Seriablizable具有更好的性能。实现Parcelable接口的对象就可以实现序列化并可以通过Intent和Binder传递。属性动画
差值器和估值器Android的权限管理机制
SDK版本升级的兼容问题
Dalvik、Art虚拟机与JVM