01_Service

Similar documents
Android Service

Android线程和进程

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

新・解きながら学ぶJava

手说TTS开发指南

建立Android新專案

Chapter 9: Objects and Classes

建模与图形思考

Microsoft Word - 01.DOC

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

untitled

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

RxJava

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

untitled

Java

Microsoft Word - ASM SDK 說明文件

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

建模与图形思考

1.5招募说明书(草案)

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Microsoft Word - ch04三校.doc

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Microsoft Word - 第3章.doc

Microsoft Word - A _ doc

untitled

Dynamic Layout in Android

chp6.ppt

Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21

1. 技術項目簡介 對於應用程式開發人員而言, 其開發程式的執行效能, 攸關使用者的使用意願 故開發時最好能夠兼顧所開發之軟體於執行時期, 對於系統的資源使用情況 本技術可以幫助程式開發人員瞭解所欲開發之應用軟體, 對於系統效能的影響, 進而進行效能改善 有別於市面上的應用程式, 本軟體開發套件可以

<4D F736F F F696E74202D20B8DFBCB6D3C3BBA7BDE7C3E6D3EBB6E0CFDFB3CC2E707074>

《大话设计模式》第一章

新版 明解C++入門編

Guava学习之Resources

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

软件工程文档编制

EJB-Programming-4-cn.doc

INTRODUCTION TO COM.DOC

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

_banneradview.settest(true); _banneradview.setuserkeywords("swimming"); _banneradview.setusercategories("1,3,4"); _banneradview.setusergender(jdbanner

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

untitled

无类继承.key

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

Android 编程基础 Android 开发教程 & 笔记 1

<4D F736F F D20B5DA33D5C220D3CECFB7D6D0B5C4B6E0CFDFB3CC2E646F6378>

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

南京市人才服务中心

第四章 Android 事件处理 一 学情分析前面我们学习了 Android 提供的一些强大的界面组件, 这些组件主要是用来进行数据显示, 如何用户想进行交互, 实现具体的功能, 则还需要相应事件处理进行辅助 当用户在程序上执行各种操作是, 如单机一个按钮, 应用程序必须为用户提供相应动作, 这种响

拦截器(Interceptor)的学习

實作SQLiteOpenHelper類別

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

云数据库 RDS SDK

Android Fragment

Hadoop&Spark解决二次排序问题(Hadoop篇)

!!!

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1. 请描述下Activity的生命周期。

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

3.1 num = 3 ch = 'C' 2

Guava学习之CharSequenceReader

14

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

untitled


untitled

百度xx SDK用户手册

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

用户大会 论文集2.2.doc

JavaIO.PDF

为什么引入 Intent Android 应 用程序的四 大组件 Activities Services Content Providers Broadcast Receivers 解决 Android 应用的各项组件之间的通讯 Activity Service Intent Broadcast R

FY.DOC

chap07.key

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

Swing-02.pdf

教育部補助資訊軟體人才培育先導計畫 100 年度課程發展專案計畫 實驗課程名稱 : IPC(Inter-Process Communication) 開發教師 : 張晉源老師 開發學生 : 林政揚 學校系所 : 樹德科技大學資訊工程學系

ASP.NET实现下拉框二级联动组件

javaexample-02.pdf

概述

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

1

CC213

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

JBuilder Weblogic

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

Microsoft PowerPoint - plan08.ppt

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

Transcription:

移动平台应用软件开发 Service 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年

什么是 Service 与 Activity 一样, 同属 Android 基本组件 后台运行, 不与用户交互, 没有可视化界面 最常见的 Service 如 : 在后台播放歌曲 后台执行文件的下载 同样需在 AndroidManifest.xml 中注册 每一个服务均继承自父类 Service Service 可以通过 Context.startService() 或 Context.bindService() 来创建

void oncreate( ) Service 生命周期 void onstartcommand( ) void ondestroy()

实现 Service 实现 Service 需要继承 android.app.service 类, 然后重写 onstartcommand onbind 和 oncreate 等方法 如果在 Activity 等组件中通过 Context.startService() 方法启动 Service, 需要重写 onstartcommand 方法 如果在 Activity 等组件中通过 Context.bindService() 方法绑定 Service, 需要重写 onbind 方法

Service 的调用 如果调用 Context.startService(), 那么系统将会查找这个 Service, 如果必要则创建它并调用它的 oncreate() 方法, 然后调用 onstartcommand 方法, Service 开始运行直到 Context.stopService() 或者 stopself() 方法被调用 注意, 多次调用 Context.startservice() 不会嵌套 ( 即使会有相应的 onstartcommand 被调用 ), 所以无论同一个服务被启动了多少次, 一旦调用 Context.stopService() 或者 stopself(), 他都会被停止 一个服务只会创建一次, 销毁一次, 但可以开始多次, 因此,onCreate 和 ondestroy 方法只会被调用一次, 而 onstartcommand 方法会被调用多次

Service 示例 public class MyService extends Service { @Nullable public IBinder onbind(intent intent) { Log.d("Myservice","Myservice->onBind"); return null; public void oncreate() { super.oncreate(); Log.d("Myservice","Myservice->onCreate"); public int onstartcommand(intent intent, int flags, int startid) { Log.d("Myservice","Myservice->onStartCommand"); return super.onstartcommand(intent, flags, startid); startservice(new Intent(this,MyService.class)); startservice(new Intent(this,MyService.class)); startservice(new Intent(this,MyService.class)); stopservice(new Intent(this,MyService.class)); stopservice(new Intent(this,MyService.class)); public void ondestroy() { super.ondestroy(); Log.d("Myservice","Myservice->onDestroy");

扩展练习 重写 onstartcommand oncreate 方法 ondestroy, 并通过 Log 打印信息, 分析这几个函数的调用时机 在 onstartcommand 中开启一个新的线程, 每隔一秒输出一条信息

在 Service 异步执行任务 Android 提一个工具类 AsyncTask 实现 AsyncTask 类中定义的下面一个或几个方法 Ø onpreexecute() 开始执行前的准备工作 ; Ø doinbackground(params...) 开始执行后台处理, 可以调用 publishprogress 方法来更新实时的任务进度 ; Ø onprogressupdate(progress...) 在 publishprogress 方法被调用后,UI thread 将调用这个方法从而在界面上展示任务的进展情况, 例如通过一个进度条进行展示 Ø onpostexecute(result) 执行完成后的操作, 传送结果给 UI 线程

AsyncTask Android 另外提供了一个工具类 :AsyncTask 使得 UI thread 的使用变得异常简单 它使创建需要与用户界面交互的长时间运行的任务变得更简单, 不需要借助线程和 Handler 即可实现 使用 AsyncTask 时, 需要继承 AsyncTask 父类并重写其中的回调函数和后台处理函数

AsyncTask 使用 实现 AsyncTask 类中定义的下面一个或几个方法 Ø onpreexecute() 开始执行前的准备工作 ; Ø doinbackground(params...) 开始执行后台处理, 可以调用 publishprogress 方法来更新实时的任务进度 ; Ø onprogressupdate(progress...) 在 publishprogress 方法被调用后,UI thread 将调用这个方法从而在界面上展示任务的进展情况, 例如通过一个进度条进行展示 Ø onpostexecute(result) 执行完成后的操作, 传送结果给 UI 线程 这 4 个方法都不能手动调用 所以要求 : 1) AsyncTask 的实例必须在 UI thread 中创建 ; 2) AsyncTask.execute 方法必须在 UI thread 中调用 ;

示例 : 使用 AsyncTask 的计时器 private Button BtnStart; private TextView txtviewtimer; private int Count = 0; private boolean isrunning = false; BtnStart = (Button) findviewbyid(r.id.btnstart); txtviewtimer = (TextView) findviewbyid(r.id.txtviewtimer); BtnStart.setOnClickListener(btnlistener); private Button.OnClickListener btnlistener = new Button.OnClickListener() { public void onclick(view v) { // TODO Auto-generated method stub isrunning=true; TimeTickLoad timetick = new TimeTickLoad(); timetick.execute(); ;

private class TimeTickLoad extends AsyncTask<Void, Integer, Void> { protected void onpreexecute() { super.onpreexecute(); protected Void doinbackground(void... arg0) { while (isrunning) { try { Thread.sleep(1000); catch (InterruptedException e) { // TODO Auto-generated catch block e.printstacktrace(); Count++; publishprogress(null); return null;

protected void onprogressupdate(integer... values) { // TODO Auto-generated method stub txtviewtimer.settext(" 时间已经过去了 " + String.valueOf(Count) + "S"); super.onprogressupdate(values); protected void onpostexecute(void result) { super.onpostexecute(result);

讨论 在天气预报项目中, 如何利用服务的机制?

Q&A 本讲结束!