一、Service学习
Service
Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。另外,一个组件能够绑定到一个service与之交互(IPC机制),例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行。
Service有两种状态,“启动的”和“绑定”:
通过startService()启动的服务处于“启动的”状态,一旦启动,service就在后台运行,即使启动它的应用组件已经被销毁了。通常started状态的service执行单任务并且不返回任何结果给启动者。比如当下载或上传一个文件,当这项操作完成时,service应该停止它本身。
还有一种“绑定”状态的service,通过调用bindService()来启动,一个绑定的service提供一个允许组件与service交互的接口,可以发送请求、获取返回结果,还可以通过夸进程通信来交互(IPC)。绑定的service只有当应用组件绑定后才能运行,多个组件可以绑定一个service,当调用unbind()方法时,这个service就会被销毁了。
另外,在官方的说明文档中还有一个警告:
service与activity一样都存在与当前进程的主线程中,所以,一些阻塞UI的操作,比如耗时操作不能放在service里进行,比如另外开启一个线程来处理诸如网络请求的耗时操作。如果在service里进行一些耗CPU和耗时操作,可能会引发ANR警告,这时应用会弹出是强制关闭还是等待的对话框。所以,对service的理解就是和activity平级的,只不过是看不见的,在后台运行的一个组件,这也是为什么和activity同被说为Android的基本组件。
Service生命周期中的一些方法:
在新建Service类后需要在Mainfest中注册
IntendService(异步处理服务)
IntentService继承自Service,Service不是一个单独的进程 ,它和应用程序在同一个进程中。
Service也不是一个线程,所以我们应该避免在Service里面进行耗时的操作。
把耗时的操作直接放在Service的onStart方法中,这样会出现(ANR)Application Not Responding!
如果有耗时操作在Service里,就必须开启一个单独的线程来处理。
IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。
二、BroadcastReceiver学习
四大组件之一:广播接收器,没有用户界面。可以分为顺序广播和普通广播还有LocalBroadcastManager(本应用的广播)。广播有适用范围不能滥用。
两种注册形式:静态注册 动态注册
Context.sendBroadcast接口发送广播,接收者通过Context.registerReceiver()动态注册
在AndroidManifest.xml文件中通过标签静态注册
动态注册
发送广播
接收广播
三、webview学习
访问网页(注册网络权限):
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl(“http://www.baidu.com“);
webView.setWebViewClient(newWebViewClient(){
@Override
//重新加载
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//在这里加载
urlview.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);}
});
四、widget学习
App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget Provider来发布一个Widget。
1、注册App Widget
2、初始化xml文件
3、继承AppWidgetProvider
4、AppWidgetProvider继承自 BroadcastReceiver,它能接收 widget 相关的广播,例如 widget 的更新、删除、开启和禁用等。