Android学习第四周_服务、广播和酷特性
来源:互联网 发布:地摊叫卖录音软件 编辑:程序博客网 时间:2024/05/22 14:39
一、service的用法
1.service的概念
Service是一个可以在后台长时间的操作,默默地为其他应用服务的不提供界面的Android组件。
2、基本使用
(1)启动服务的方法
- startService
- bindService
(2)代码描述
首先新建一个ServiceDemo的java程序并继承于Service,然后在ServiceDemo中重写Service中的方法,代码如下:
“`
public class ServiceDemo extends Service{
@Overridepublic void onCreate() { super.onCreate(); Log.i(TAG,"onCreate"); mMediaPlayer = MediaPlayer.create(this,R.raw.faded);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG,"onStartCommand"); mMediaPlayer.start(); return START_NOT_STICKY;}@Overridepublic void onDestroy() { mMediaPlayer.stop(); super.onDestroy(); Log.i(TAG,"onDestroy");}public class LocalBinder extends Binder{ MusicService getService(){ return MusicService.this; }}
}
在程序中,主要是重写onCreate、onStartCommand和onDestroy方法,然后在这其中添加相应的逻辑代码。
(3)Service的生命周期
通过这个图可以看到,两种启动service的方式以及他们的生命周期,bind service的不同之处在于当绑定的组件销毁后,对应的service也就被kill了。service的声明周期相比与activity的简单了许多,只要好好理解两种启动service方式的异同就行。
关于生命周期,比较简单的流程图如下:
(4)另一个service–IntetService
IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。而在一般的继承Service里面如果要进行耗时操作就必须另开线程,但是使用IntentService就可以直接在里面进行耗时操作,因为默认实现了一个worker thread。对于异步的startService请求,IntentService会处理完成一个之后再处理第二个。
二、BroadcastReceiver
1、概述
广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用 Context.sendBroadcast() 、 Context.sendOrderedBroadcast() 来实现的。通常一个广播 Intent 可以被订阅了此 Intent 的多个广播接收者所接收。
2、两者注册方式
第一种——动态注册:
public class MyBroadcastReceiver extends BroadcastReceiver {
// action 名称String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED" ;public void onReceive(Context context, Intent intent) { if (intent.getAction().equals( SMS_RECEIVED )) { // 相关处理 : 地域变换、电量不足、来电来信; }}
}
第二种——系统注册:
< receiver android:name = “.MyBroadcastReceiver” >
< intent-filter android:priority = “1000” >
< action android:name = ” android.provider.Telephony.SMS_RECEIVED” />
当然了需要权限 :
< uses-permission android:name = “android.permission.RECEIVE_SMS” />
< uses-permission android:name = “android.permission.SEND_SMS” />
三、WebView
1、概述
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,它使用了WebKit渲染引擎加载显示网页。
2、使用步骤
(1)在要Activity中实例化WebView组件:WebView webView = new WebView(this);
(2)调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl(“http://www.baidu.com“);
本地文件用:webView.loadUrl(“file:///android_asset/XX.html”); 本地文件存放在:assets 文件中
(3)调用Activity的setContentView( )方法来显示网页视图
(4)用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
(5)需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />
3、方法重写
(1)Url覆盖
public boolean shouldOverrideUrlLoading(WebView view, String url) { //是不是重新加载(拦截界面) //404页面 if(url.contains("404")){ view.loadUrl("http://www.zhihu.com"); } return super.shouldOverrideUrlLoading(view, url); }
(2)设置loading界面
public void onPageStarted(WebView view, String url, Bitmap favicon) { //页面开始加载,可以设置其loading界面 super.onPageStarted(view, url, favicon); }
(3)关闭loading
public void onPageFinished(WebView view, String url) { //页面加载结束,关闭loading界面 super.onPageFinished(view, url); }
(4)Url替换
public void onLoadResource(WebView view, String url) { //url替换,为了节省流量,盗用人家的logo if(url.contains("logo.img")){ }
(5)网页请求响应
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { //拦截请求 ,url是打开一个连接 而请求是客户端发送信息给服务器 //hybrid离线网页 return super.shouldInterceptRequest(view, request); }
由于webview中有很多的重写方法,所以上面的知识其中的一部分,更多的还需要自己去查找Webview的源码。
四、Widget
1、概念
widget就是桌面部件,是android中独有的功能。
2、注册
<receiver android:name=".MusicWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@layout/widget_setting"/>
</receiver>
3、编写代码,代码也是继续于AppWidgetProvider,一般情况下,会重现下面的几种方法:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { pushUpdate(context,appWidgetManager,"",false);}@Overridepublic void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds);}@Overridepublic void onEnabled(Context context) { super.onEnabled(context);}@Overridepublic void onDisabled(Context context) { super.onDisabled(context);}
五、总结
本周学习的内容比较多,也比较的有趣,可以做出很多有趣的Demo,所以需要好好的练习,努力吧!
- Android学习第四周_服务、广播和酷特性
- Android应用界面开发_学习笔记_第四周
- Android学习_广播
- Android核心基础_广播_服务
- android广播和服务
- Android广播和服务
- TCP-IP学习笔记_卷1_第12章_多播和广播
- 吴恩达机器学习笔记_第四周
- 第四周Android学习笔记
- Android之 广播和服务
- 第四讲 服务、广播与酷特性
- android服务_使用服务注册特殊的广播接收者
- TCP_IP协议详解学习笔记_卷1_第12章_多播和广播
- Android开发学习-7_广播
- android广播:自定义广播(第一行代码android学习)
- android学习笔记の广播与服务
- Android学习的第四周笔记
- Android 第八天_重置版_服务_注意事项
- Debugging Under Unix: gdb Tutorial
- 数据结构实验之栈:行编辑器
- VB 课感受
- 单链表是否有环并如何找到环入口
- 开发板烧录
- Android学习第四周_服务、广播和酷特性
- 数据结构算法-快排和归并
- 菜鸟学习Cocos2d-x 3.x——浅谈动作Action
- service
- iOS 小技巧集结号
- 第五周项目2-游戏中的角色类
- StickyScrollView解说
- Tomcat server 启动后localhost:8080 报404
- Java基础------知识点整理(三)----- 继承