Android知识整理总结(二)

Service的两种启动方法,有什么区别

 1.在Context中通过public boolean bindService(Intent service,ServiceConnection conn,int flags) 方法来进行Service与Context的关联并启动,并且Service的生命周期依附于Context。

 2.通过public ComponentName startService(Intent service)方法去启动一个Service,此时Service的生命周期与启动它的Context无关。(要注意的是,whatever,都需要在xml里注册你的Service)

Broadcast Receiver的两种动态注册和静态注册有什么区别

静态注册:在AndroidManifest.xml文件中进行注册,当App退出后,Receiver仍然可以接收到广播并且进行相应的处理

 动态注册:在代码中动态注册,当App退出后,也就没办法再接受广播了

ContentProvider的使用

 ContentProvider是用于将数据共享给其他应用。点击打开链接

目前能否保证service不被杀死措施

Service设置成START_STICKY

kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样

 提升service优先级

 在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播。

 提升service进程优先级

 Android中的进程是托管的,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收,当service运行在低内存的环境时,将会kill掉一些存在的进程。因此进程的优先级将会很重要,可以在startForeground()使用startForeground()将service放到前台状态。这样在低内存时被kill的几率会低一些。(如果在极度极度低内存的压力下,该service还是会被kill掉,并且不一定会restart())

 onDestroy方法里重启service

 service +broadcast 方式,就是当service走onDestory()的时候,发送一个自定义的广播,当收到广播的时候,重新启动service。

 直接在onDestroy()里startService(当使用类似口口管家等第三方应用或是在setting里-应用-强制停止时,APP进程可能就直接被干掉了,onDestroy方法都进不来,所以还是无法保证)

 监听系统广播判断Service状态

 通过系统的一些广播,比如:手机重启、界面唤醒、应用状态改变等等监听并捕获到,然后判断我们的Service是否还存活,别忘记加权限

 大招: 放一个像素在前台(手机QQ)

三种动画的区别,各有什么特点?

 tween 补间动画。通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果。Alpha、Scale、Translate、Rotate。

 frame 帧动画AnimationDrawable 控制animation-list xml布局

PropertyAnimation 属性动画

Android的数据储存形式

 SQLite:SQLite是一个轻量级的数据库,支持基本的SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,

封装了一些操作数据库的api

SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。

 File: 即常说的文件(I/O)存储方法,常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。

 ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,

但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),

如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。

Sqlite的基本操作

 点击打开链接

如何判断应用被强杀,应用被强杀如何解决

 在Application中定义一个static常量,赋值为-1,在欢迎界面改为0,如果被强杀,application重新初始化,在父类Activity判断该常量的值。

 解决:如果在每一个Activity的onCreate里判断是否被强杀,冗余了,封装到Activity的父类中,如果被强杀,跳转回主界面,如果没有被强杀,执行Activity的初始化操作,给主界面传递intent参数,主界面会调用onNewIntent方法,在onNewIntent跳转到欢迎页面,重新来一遍流程。

你可能感兴趣的:(Android知识)