安卓基础知识点

standard,singletop,singletask,singleinstance。
第一行代码(第二版)关于activity启动模式知识点。
可以在配置文件中通过<activity>标签指定活动的启动模式。
standard
默认的启动模式,在不进行显式指定的情况下,所有活动都是自动使用这个模式,在这个模式下,每当启动一个新的活动,它就会在返回栈(安卓中保存活动的栈)中入栈,并处于栈顶的位置,而且系统不会在乎这个活动是否已经在栈中,每次启动都会参加一个新的实例。
singleTop
栈顶复用模式
在这种模式下,在启动活动的时候,发现栈顶已经是该活动,则认为可以直接使用它,不会再创建该活动的实例。
singleTask
栈内复用模式,这可以解决重复建栈顶活动的问题,每次启动该活动的时候,如果栈内已经有该活动的实例,则直接使用,并把在这个活动之上的活动出栈,如果没有则创建这个活动的实例。
singleInstance
这个模式相较于前三个有点复杂,它会启用一个新的返回栈来管理这个活动,
标准模式,栈顶复用模式,栈内复用模式。
singleinstance模式,独享一个任务栈。这样做的意义:想象以下场景,假设我们有一个活动是允许其他程序调用的,如果我们想实现其他程序和我们可以共享这个活动的实例,应该怎么实现?使用前三种启动模式是不行的,因为每个应用程序都会有自己的返回栈,同一个活动在不同的返回栈入栈时必然是创建了新的实例的。而使用singleInstance模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个程序访问了这个活动,都共用的同一个返回栈,也就解决了共享活动实例的问题。
scheme跳转协议,一种页面内跳转协议,通过定义自己的协议,可以方便跳转app的各个页面;通过scheme协议,服务器可以定制化告诉app跳转哪个页面,可以通过通知栏消息定制跳转页面,也可以通过H5页面跳转页面。
Fragment详解
一、fragment为什么被称为"第五大组件"。
1,fragment使用频率很高,所以一般会称它为第五大组件,fragment相对于activity更省内存,切换效率高,fragment要依附activity,要加载到activity中使用。
2,fragment的加载方式,静态加载,动态加载。
使用的多的还是动态加载,动态加载过程:1,添加一个FragmentTransaction的实例。2,用add方法加上Fragment的对象。3,调用commit方法使得FragmentTransaction的实例生效。
3,FragmentPagerAdapter和FragmentStatePagerAdapter的区别
FragmentPagerAdapter用于页面较少的情况,而FragmentStatePagerAdapter用于页面较多的情况,以为每次都会回收内存,而FragmentPagerAdapter不会回收内存,所以在页面较少的情况也不会导致内存不足。
Fragment的replace、add、remove方法,replace替换,add加一个fragment。
Service相关
一、service基础,service是什么?
Service是可以在后台处理事务,没有界面。service保活。
Service可以被活动启动,即使活动被销毁了,服务也不会退出,service不能进行耗时操作,因为它是运行在主线程中。service是一个可以在后台执行长时间运行而没有用户界面的应用组件。不能做耗时操作。
service和thread区别?
thread是程序执行的最小单元,运行是相对独立的,可以开启一个子线程进行耗时操作;而service是依托于所在的主线程上,并不是那么独立。
两者有什么关系?
实际上是没有关系的,service是运行在主线程中,service的主要运用场景是什么?安卓的后台和子线程不是一个概念,后台和服务也是不同的概念,为什么不直接在activity创建子线程进行耗时任务呢?因为activity很难对子线程进行控制,特别是activity被销毁以后不能获取之前的子线程实例。而service则很方便。
Service两种启动方式
1,startService
活动调用startService()方法后服务处于启动状态,activity即使销毁了这个service也是在后台一直处于启动状态,要停止的话要手动停止它,stopService()或者stopSelf()方法,startService(intent),在方法传入一个intent即可。
具体启动方法:定义一个类继承Service。2,在Manifest.xml文件中配置该service。3,使用Context的startService(intent)方法启动该Service。4,不再使用时,要调用stopService(intent)或者stopSelf()方法停止该服务。
2,bindService
服务和activity处于绑定状态,允许两个进行数据交互,进程间通信,多个activity可以绑定一个Service。
创建bindService服务端,继承自Service并在类中创建一个实现Binder接口的实例对象并提供公共方法给客户端调用。
从onBind()回调方法返回此Binder实例。
在客户端中,从onServiceConnected()回调方法接收Binder,并使用提供的方法调用绑定服务。
同一个Service,先调用startservice方法,再调用bindService方法,如何停止这个服务?答:无论startService调用几次,调用一次stopService方法就可以停止service;调用n次bindService方法,必须调用n次unbindService方法。因此,需要调用一次stopService方法(或stopSelf方法)和n次unbindService方法,执行顺序没有要求,最后一个stopService或者unbindService方法会导致Service的onDestroy方法执行。
service的onStartCommand方法的返回值?不同的返回值有什么区别?
答:
service的生命周期方法运行在哪个线程?
答:service的生命周期方法onCreate、onStart、onBind运行在主线程。

猜你喜欢

转载自blog.csdn.net/u010075989/article/details/80868755
今日推荐