对于安卓锁屏中知识点小结
java.lang.Double.parseDouble():
该方法返回了一个新的双初始化为指定字符串表示的值,这样做因为double类有valueof的方法。
本例中用于讲一个字符串转换为数字的方法,如果执行没有触发异常就表示为电话号码。
String.Contains()方法:
该方法用于检查是否包含对应内容,只支持charsequence,即字符序列。
本例中,用于检查坐着的手机号是否包含在短信来源中
监听短信SMS监听:
首先提取intent中的bundle对象,然后使用pdu密钥提取SMS plus数组,每一个pdu都表示一个sms消息,使用SmsMessage的createFromPdu()方法将每一个pdu字节数组转换成为Smsmessage对象,调用该对象的getOriginatingAddress()方法可获取发送方手机号,getMessageBody()方法可以获取短信的内容。
时间判断isflag():
个人认为就是一个判断的指标,类似于if中的判别式
保证SMSserver不被杀死的方法:
service+broadcast
Service:可通过context.startservice(对于本地服务)和context.bindseverice(对于远程服务)来启动。
法一:使用onStartCommand方法,返回START_STICKY
法二:提升service进程优先级
法三:
提升service优先级
进程优先级排序从高到低:
前台进程>可视进程>次要服务进程>后台进程>内容供应节点>空进程
将service放到前台,但是注意onDestroy里需要stopForeground(true)
法四:在onDestroy方法里重启service
法五:设置android:persistent=“true”(不知道我看的对不对,应该没问题)不要乱设置!
法六:通过系统的各种广播监听
法七:通过开启两个app,相互监听。
SharedPreference存储:
1、context类中的getSharedPreferences()方法
有两种模式:MODE_PRIVATE---仅当前应用才可读写
MODE_MULTI_PROGRESS---可允许多个进程读写
2、Activity类中的getPreferences()方法
只能在该activity中使用
3、PreferenceManager类中的getDefultSharedPreferences()方法
静态方法
步骤:
调用SharedPreference对象的edit()方法获取一个SharedPreference.editor对象
向SharedPreference.editor中添加数据,方式对应为 布尔型——putBoolean、字符串——putString()
调用commit()方法将添加的数据提交。
Intent四大属性:
Action、Data、Category、Extras
Action:Action属性的值为一个字符串,它代表了系统中已经定义了一系列常用的动作。通过setAction()方法或在清单文件AndroidManifest.xml中设置。默认为:DEFAULT。
Data:Data通常是URI格式定义的操作数据。例如:tel:// 。通过setData()方法设置。
Category:Category属性用于指定当前动作(Action)被执行的环境。通过addCategory()方法或在清单文件AndroidManifest.xml中设置。默认为:CATEGORY_DEFAULT。
Extras:Extras属性主要用于传递目标组件所需要的额外的数据。通过putExtras()方法设置。
(1)在AndroidMainfest.xml 中对每一个Activity都做了说明——intent-filter,intent-filter声明了需要接收怎样的Intent,当发送的Intent和intent-filter中定义的相符合,就会启动相应的Activity;
(2)当有多个Activity符合发送的Intent时,Android系统会列出所有满足Intent的Activity,用户可以通过选择进行相关的操作;
(3)在一个Activity的intent-filter中可以有多个action、多个category、多个data,这样可以有多种组合与Intent进行匹配。注意:如果在一个Activity中有多个Intent进行匹配的时候,建议使用多个intent-filter与Intent进行匹配。猜测:这样应该可以提高Intent的匹配速度。
(4)data属性,这是一个进行反向限制Intent的操作,要求Intent的data必须是intent-filter中声明的数据之一(应为在一个intent-filter中可以设置多个data)。注意:如果要启动目标Activity,但是指定的data数据类型与Activity中data数据类型不匹配,将会造成ActivityNotFoundException异常。
Class.forName()用法及与new区别(没搞透)
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。 而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。
new 和Class.forName()有什么区别? 其实上面已经说到一些了,这里来做个总结: 首先,newInstance( )是一个方法,而new是一个关键字; 其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。 简言之:newInstance(): 弱类型,低效率,只能调用无参构造。new: 强类型,相对高效,能调用任何public构造。Class.forName(“”)返回的是类。Class.forName(“”).newInstance()返回的是object
长短信发送:
public void sendMultipartTextMessage
发送短信的三种方式:
发送信息的三种方法(在android.telephony.SmsManager中定义)
SmsManager.getDefault().sendDataMessage(destinationAddress, scAddress, destinationPort, data, sentIntent, deliveryIntent);
SmsManager.getDefault().sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent);
SmsManager.getDefault().sendMultipartTextMessage(destinationAddress, scAddress, parts, sentIntents, deliveryIntents);
Activity中finish() onDestroy() 和System.exit()的区别
Finish():activity内容需要关闭,将其移出栈,但是资源并没有释放,空间依旧是被占用的。
onDestroy():在activity生命周期最后一步,将资源空间回收,也就是与此activity有关的内容全部处理完成。
Exit(0):推出整个应用程序,针对整个app,将整个app全部kill掉。