美文网首页
Android开发笔记五

Android开发笔记五

作者: 0a61c9729dbc | 来源:发表于2016-06-03 00:06 被阅读0次

    一、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开发笔记五

          本文链接:https://www.haomeiwen.com/subject/dbzbrttx.html