Welcome 微信登录

首页 / 移动开发 / Android

Android App后台服务报告工作状态实例

Android App后台服务报告工作状态实例

本节讲运行在后台服务里的工作请求,如何向发送请求者报告状态。推荐用LocalBroadcastManager发送和接收状态,它限制了只有本app才能接收到广播。从IntentService汇报状态从IntentService发送工作请求状态给其他组件,先创建一个包含状态和数据的Intent。也可以添加action和URI到intent里。下一步,调用 LocalBroadcastManager.sendBroadcast()发送Intent,应用中所有注册...
Android中使用IntentService创建后台服务实例

Android中使用IntentService创建后台服务实例

IntentService提供了在单个后台线程运行操作的简单结构。这允许它操作耗时操作,而不影响UI响应。同样,IntentService也不影响UI生命周期事件,所以,它在某些可能关闭AsyncTask的情况下,仍会继续运行(实测在Activity的onDestory里写AsyncTask无法运行)。IntentService有如下限制:1.它不能直接影响UI。要把结果反映给UI,需要发给Activity2.工作请求会顺序运行。如果一个操作未结束,后面发...
Android开发中避免应用无响应的方法(Application Not Responding、ANR)

Android开发中避免应用无响应的方法(Application Not Responding、ANR)

App里发生的最糟糕的事是弹出应用无响应”Application Not Responding” (ANR) 对话框.本课讲的是如何保持应用响应,避免ANR。什么触发ANR通常,系统会在应用无法对用户输入响应时显示ANR。比如,如果一个应用在I/O操作上阻塞了(频繁请求网络)UI线程,系统无法处理用户输入事件。或者,在UI线程中,app花了大量时间在构建复杂的类,或在游戏中计算下一个动作。保证这些操作高效是很重要的,但最高效的代码也需要花费时间。在任何情况...
Android后台线程和UI线程通讯实例

Android后台线程和UI线程通讯实例

本节向你展示如何在任务中发送数据给UI线程里的对象,这个特性允许你在后台线程工作,完了在UI线程展示结果。在UI线程定义一个HandlerHandler是Android系统线程管理框架里的一部分。一个Handler对象接收消息,并且运行代码来处理消息。正常情况下,你为新线程创建Handler,但你也可以为已有的线程创建一个Handler.当你连接Handler到UI线程时,处理消息的代码会在UI线程上运行.在创建线程池的类的构造器里实例化Handler对象...
在Android线程池里运行代码任务实例

在Android线程池里运行代码任务实例

本节展示如何在线程池里执行任务。流程是,添加一个任务到线程池的工作队列,当有线程可用时(执行完其他任务,空闲,或者还没执行任务),ThreadPoolExecutor会从队列里取任务,并在线程里运行。本课同时向你展示了如何停止正在运行的任务。在线程池里的线程上执行任务在ThreadPoolExecutor.execute()里传入 Runnable对象启动任务。这个方法会把任务添加到线程池工作队列。当有空闲线程时,管理器会取出等待最久的任务,在线程上运行。...
Android中创建多线程管理器实例

Android中创建多线程管理器实例

如果你要反复执行一个任务,用不同的数据集(参数不同),但一次只要一个执行(任务是单线程的),IntentService符合你的需求。当需要在资源可用时自动执行任务,或允许多任务同时执行,你需要一个线程管理器管理你的线程。ThreadPoolExecutor,会维护一个队列,当它的线程池有空时,从队列里取任务,并执行。要运行任务,你要做的就是把它加到队列里。线程池可以并联运行一个任务的多个实例,所以你要保存代码线程安全。能被多线程访问的变量需要同步块.更多信...
Android中实现Runnable接口简单例子

Android中实现Runnable接口简单例子

本课讲的是如何实现一个Runnable,在一个独立线程上运行Runnable.run()方法.Runnable对象执行特别操作有时叫作任务。Thread和Runnable都是基础的类,靠他们自己,能力有限。作为替代,Android有强大的基础类,像HandlerThread,AsyncTask,IntentService。Thread和Runnable也是ThreadPoolExecutor的基础类。这个类可以自动管理线程和任务队列,甚至可以并行执行多线程...
Android判断和监听底座状态和类型的方法介绍

Android判断和监听底座状态和类型的方法介绍

底座的状态跟充电状态类似,很多底座提供充电功能(座充).底座状态同样使用sticky Intent广播。可以查询设备是否插入底座,哪种底座。判断当前底座状态广播的Action是ACTION_DOCK_EVENT,sticky Intent不需要注册真实的接收器复制代码 代码如下:IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);Intent dockStatus = cont...
Android中检查、监听电量和充电状态的方法

Android中检查、监听电量和充电状态的方法

当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始。电池寿命通过剩余电量和充电状态来影响应用更新的执行。当用交流电充电时,执行更新操作对设备的影响是微不足道的,所以在大多数案例里,你可以把更新频率调到最快。如果设备不在充电,降低更新频率可以帮助延长电池寿命。类似的,你可以检查电池剩余电量级别,在电量低时,应该降低更新频率甚至停止更新。注:此处的更新,指的是类似发送心跳包的动作,或者定时更新内容。并非仅仅指更新应用版...
Android中使用include标签和merge标签重复使用布局

Android中使用include标签和merge标签重复使用布局

尽管Android提供了各种组件来实现小而可复用的交互元素,你也可能因为布局需要复用一个大组件。为了高效复用完整布局,你可以使用<include/>和<merge/>标签嵌入另一个布局到当前布局。所以当你通过写一个自定义视图创建独立UI组件,你可以放到一个布局文件里,这样更容易复用。复用布局因为其允许你创建可复用的复杂布局而显得非常强大。如,一个 是/否 按钮面板,或带描述文本的自定义进度条。这同样意味着,应用里多个布局里共同的元素...
跨平台移动WEB应用开发框架iMAG入门教程

跨平台移动WEB应用开发框架iMAG入门教程

iMAG是一个非常简洁高效的移动跨平台开发框架,开发一次可以同时兼容Android和iOS平台,有点儿Web开发基础就能很快上手。当前移动端跨平台开发的框架有很多,但用iMAG还有一个好处,就是用iMAG开发出的App是原生的。iMAG采用XML + JavaScript(配置 + 脚本)的开发方式,它的原理是将符合iMAG开发规范的XML文件解释成对应的原生应用代码来执行。原生跨平台开发,iMAG App具有和Native App相同的性能和用户体验,因...
Caused by: android.os.NetworkOnMainThreadException错误解决办法

Caused by: android.os.NetworkOnMainThreadException错误解决办法

好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThreadException,查了下原因上在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Http请求时间太长造成程序假死的情况吧。解决办法有两个思路,分别是:第一种方法:直接忽视,强制使用(强烈不推荐,但是修改简单)在MainActivity文件的setCon...
Android中自定义标题栏样式的两种方法

Android中自定义标题栏样式的两种方法

原装的Android标题栏配色比较单调,就是黑色的一坨,现在假设你的软件需要独自添加标题栏,这样不仅美观而且可以将进度条等加进去,如何实现:方法一、在你的那张Activity中onCreate方法中加上下面代码:requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main);//软件activity的布局 getWindow().setFeatureInt(W...
Android中实现GPS定位的简单例子

Android中实现GPS定位的简单例子

今天弄了一个多小时,写了一个GPS获取地理位置代码的小例子,包括参考了网上的一些代码,并且对代码进行了一些修改,希望对大家的帮助。具体代码如下: 要实用Adnroid平台的GPS设备,首先需要添加上权限,所以需要添加如下权限:<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>具体实现代码如下:首先判断GP...
<< 151 152 153 154 155 156 157 158 159 160 >>