Android学习笔记(三)

ContentProvider简介

ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序便可通过提供ContentProvider来实现,其他应用程序就可通过ContentResolver来操作ContentProvider暴露的数据。如果某一应用程序通过ContentProvider暴露了自己的数据操作接口,则不管该应用程序是否启动,其他应用程序都可以通过该接口来操作该应用程序的内部数据,包括增加、删除、修改、查询数据。

android:authorities属性

   定义好的ContentProvider类必须在AndroidManifest.xml里声明后才能使用,声明中必须添加授权属性

android:authorities,相当于为该ContentProvider指定域名,Content uri中content://authority/optionalPath/optionalId的authority部分便是android:authorities属性指定的值。属性值定义的方法为包名+ “.”+ 该ContentProvider的名称。

Service本身存在的两个问题

1. Service不会专门启动一条单独的进程,Service与它所在应用处于同一个进程中。

2. Service不是一条新的线程,因此不应该在Service中直接处理耗时的操作,耗时的操作应该开启一个新的线程来处理。

处理耗时任务的问题

如果就开发这需要在Service模块中处理耗时任务,一般是在Service中另外启动一条新线程来处理,但不能在其他应用程序组件中启动子线程来处理,因为Activity可能会被用户退出、BroadcastReceiver的生命周期很短,很有可能出现子线程还没有结束,Activity已经被用户退出,或者BroadcastReceiver已经结束,出现空线程的情况。

IntentService简介

IntentService能够弥补Service本身的两个缺陷: IntentService会使用队列来管理请求的Intent,每当客户端代码通过Intent请求启动IntentService时,IntentService会将该Intent加入队列中,然后开启一条新的worker线程来处理该Intent,对于异步的startService()请求,IntentService会按次序依次处理队列中的Intent,该线程保证同一时刻只处理一个Intent。由于IntentService使用新的worker线程处理Intent请求,因此IntentService不会阻塞主线程,所以IntentService自己便能处理耗时的任务。

静态代码块

即类中不包含任何方法体的静态代码块,其格式一般为static{…}。这种静态代码块只在类被加载时执行,而且只执行一次。静态代码块一般用来执行类属性的初始化。

getResources().getStringArray(…)作用

getResources().getStringArray(R.array.setting)是获取应用程序中数组资源的方法,即如果要使用应用程序中定义的数组资源,需要使用getResources().getStringArray(R.array.*),其返回值为一个数组。

TelephonyManager服务类的getXxx()方法举例

1.TelephonyManager.getDeviceId()                      //获取设备的编号

2.TelephonyManager.getDeviceSoftwareVersion()           //获取系统平台的版本

3.TelephonyManager.getNetworkOperator()                //获取网络运营商代号

4.TelephonyManager.getNetworkOperatorName()           //获取网络运营商名称

5.TelephonyManager.getPhoneType()                     //获取手机网络类型

6.TelephonyManager.getCellLocation()                    //获取设备所在位置

7.TelephonyManager.getSimCountryIso()                  //获取SIM卡的国别

8.TelephonyManager.getSimSerialNumber()                //获取SIM卡序列号

9.TelephonyManager.getSimState()                       //获取SIM卡状态

返回值的类型都是String类型。

通话状态监听器PhoneStateListener简介

PhoneStateListener是通话状态监听器,定义该监听器时必须实现onCallStateChanged(intstate, String number)方法。通话状态的主要静态常量: int CALL_STATE_IDLE  //空闲状态,没有任何活动    int CALL_STATE_OFFHOOK  //摘机状态,至少有个电话活动,该活动或是拨打或是通话,或者是on hold。并且没有电话是ringing or waiting   intCALL_STATE_RINGING //来电状态,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。

获取短信管理器的方法

SmsManager sManager= SmsManager.getDefault();     //由此方法获取应用程序的SmsManager

PendingIntent对象简介

PendingIntent对象是对Intent的包装,一般通过调用PendingIntent的getActivity()、getService()、getBroadcastReceiver()静态方法来获取PendingIntent对象。与Intent对象不同的是,PendingIntent通常会传给其他应用组件,从而由其他应用程序来执行PendingIntent所包装的Intent。

BroadcastReceiver简介

BroadcastReceiver属于系统级的监听器,拥有自己的进程,只要存在与之匹配的Intent被广播出来,BroadcastReceiver就能被激发。当被激发后,会自动触发它的onReceive()方法,onReceive()方法执行完毕后,BroadcastReceiver的实例便会被销毁。与Activity组件不同的是,当系统通过Intent启动指定的Activity组件时,如果没有找到合适的Activity组件,会导致程序异常终止,但系统通过Intent激发BroadcastReceiver时,如果找不到合适的BroadcastReceiver组件,应用不会有任何问题。此外,不能在onReceive()中执行耗时的操作,可以考虑通过Intent启动一个Service来完成该操作。但不能使用新线程完成耗时的操作,因为BroadcastReceiver本身的生命周期很短,可能出现子线程还没结束,BroadcastReceiver就已经退出了。

时间: 2024-09-28 21:58:42

Android学习笔记(三)的相关文章

Android学习笔记三:Intent实现页面跳转

在主Activity的OnCreate()方法中,通过findViewById得到Activiity_main中已定义的组件,例如Button.EditText等,注意需要强制转型view到具体的类型. 给取得的组件btn添加监听器如OnClickListener(),在其中实例化Intent对象,参数为要跳转的出发类和目标类. 用putExtra()方法添加内容到intent对象中,内容为K-V对.K中可写标记,V中存要传输的内容. public void onClick(View arg0)

Android学习笔记三:用Intent串联activity

一:Intent Intent可以理解为 意图. 我们可以通过创建intent实例来定义一个跳转意图,意图包括:要跳转到哪个页面.需要传递什么数据. 然后通过startActivity(intent)来启动跳转. 有两种方式定义Intent:显式Intent.隐式Intent. 二:显式Intent 1)我们可以在actvity的java文件中,通过代码显示定义Intent,参数为:从哪个页面,跳转到哪个页面. Intent intent = new Intent(FirstActivity.t

Pro Android学习笔记(三):了解Android资源(上)

在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源resource(上).XML解析(XmlPullParser),Android学习笔记(三九):资源resource(下). Strings资源.位于res/values下,可以有一个或多个xml文件.其中最为常见的是strings.xml,对于demo这类小例子,为了方便常全部都放在strings.x

【转】Pro Android学习笔记(三):了解Android资源(上)

在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源resource(上).XML解析(XmlPullParser),Android学习笔记(三九):资源resource(下). Strings资源.位于res/values下,可以有一个或多个xml文件.其中最为常见的是strings.xml,对于demo这类小例子,为了方便常全部都放在strings.x

Android学习笔记?从零开始?第三天?Activity

Android学习笔记?从零开始?第三天?Activity 转载请注明出处:CLeopard http://blog.csdn.net/cleopard 今天主要是对Activity的学习. –>点击进入Android学习笔记导图 http://blog.csdn.net/cleopard/article/details/44037813 –>19本Android经典教程+104个Github上火爆项目开源源码 http://download.csdn.net/album/detail/151

Android学习笔记(四三):文件访问

之前我们学习了通过preference和SQLite数据库进行数据存储,也可以通过文件方式.文件可以是在应用打包时预置,也可以是应用所生成. 文件访问有两种方式:一:静态数据的文件可以防止在res/raw中,这些文件是只读的,只有在应用版本升级的时候进行修改,或者我们先读出这些数据,通过 reference的方式来处理,这样以后可以进行修订,但是这种方式,会有两份数据保存.二:另一种方式是通过URL访问文件,动态数据的读取也可以采用SQLite3的方式. res/raw/下静态文件的读取 在re

Android学习笔记(五三):服务Service(下)- Remote Service

之前所谈的Service属于Local Service,即Service和Client在同一进程内(即同一application内),Service的生命周期服从进程的生命周期.在实际应用上,有时希望Service作为后台服务,不仅被同一进程内的activity使用,也可被其他进程所使用,针对这种情况,需要采用bindService,也就是Remote Service的方式. 在Android中,不同app属不同进程(process),进程是安全策略的边界,一个进程不能访问其他进程的存储(例如采

Android学习笔记——关于onConfigurationChanged

从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求加上注明这么一句属性: android:configChanges="orientation|keyboard|keyboardHidden" 通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChan

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供.我们将相关信息存储在一个intent中,例如该文本的Uri.这个intent可以匹配系统的多个应用,替代菜单将这些应用一一列出,菜单项的title就是该可被调用的activity的名字,图标也为该可被调用的activity的图表. 小例子说明 我们通过一个小例子进行学习,简单地打开一个URL:we