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


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 的更新、删除、开启和禁用等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,126评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,168评论 19 139
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 5,781评论 2 51
  • 哎呀呀 ,马上就要面临找工作了,媛媛心里紧张呀. 作为一个即将毕业的Android程序媛,开始面临找工作了,...
    左神话阅读 4,944评论 7 59
  • 每一位运营人应该都有这样的感受,每天到公司的第一件事必然是看数据。与产品提需求会被挑战提供预估收益数据,与技术提B...
    浅夏秋晴阅读 597评论 0 1