Android开发笔记五

一、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生命周期中的一些方法:


Android开发笔记五_第1张图片
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文件中通过标签静态注册


Android开发笔记五_第2张图片

动态注册

Android开发笔记五_第3张图片


Android开发笔记五_第4张图片

发送广播

Android开发笔记五_第5张图片

接收广播

Android开发笔记五_第6张图片

三、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


Android开发笔记五_第7张图片

2、初始化xml文件


Android开发笔记五_第8张图片

3、继承AppWidgetProvider

4、AppWidgetProvider继承自 BroadcastReceiver,它能接收 widget 相关的广播,例如 widget 的更新、删除、开启和禁用等。

你可能感兴趣的:(Android开发笔记五)