ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:209.74KB ,
资源ID:5427420      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5427420.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SDK Service线程详解.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SDK Service线程详解.docx

1、SDK Service线程详解SDK Service线程详解作者:高焕堂试 阅:public TextView tv, tv2; private IBinder ib = null; private Handler h1, h2; public void onCreate(Bundle icicle) super.onCreate(icicle); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); btn = new Button(this); btn.setI

2、d(101); btn.setText(create threads); btn.setBackgroundResource(R.drawable.heart); btn.setOnClickListener(this); LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(120, 50); param.topMargin = 10; layout.addView(btn, param); btn2 = new Button(this); btn2.setId(102); btn2.setText(exit); bt

3、n2.setBackgroundResource(R.drawable.heart); btn2.setOnClickListener(this); layout.addView(btn2, param); tv = new TextView(this); tv.setTextColor(Color.WHITE); tv.setText(); LinearLayout.LayoutParams param2 = new LinearLayout.LayoutParams(FP, WC); param2.topMargin = 10; layout.addView(tv, param2); tv

4、2 = new TextView(this); tv2.setTextColor(Color.WHITE); tv2.setText(); layout.addView(tv2, param2); setContentView(layout); /- Intent in = new Intent(com.misoo.kx02c.REMOTE_SERVICE); in.putExtra(key, 0); bindService(in, mConnection, Context.BIND_AUTO_CREATE); private ServiceConnection mConnection = n

5、ew ServiceConnection() public void onServiceConnected(ComponentName className, IBinder ibinder) ib = ibinder; public void onServiceDisconnected(ComponentName className) ; public void onClick(View v) switch (v.getId() case 101: h1= new Handler() public void handleMessage(Message msg) tv.setText(Strin

6、g)msg.obj); ; Thread t1 = new Thread(new Task();正 文:l 由进程(Process)的主线程(Main thread)执行SDK-Service(如下图的myService)对象。 Android底层Binder System在binding-time会从该进程的Thread pool里启动一个线程来执行SDK-Service的Binder接口对象(如myBinder)。 执行myActivity对象的线程与myBinder对象的线程会同步(Synchronize),让myActivity开发者觉得IPC远程呼叫、跨进程的两个线程,就如同单一线程

7、一般。本文就Local SDK-Service与Remote SDK-Service两种来说明之。一、 如果属于Local Service。 - 则myActivity与myService两者都是由main thread所执行。亦即,两者是同一线程所执行。此情形下,两个类别里的函数都不宜太费时(例如不宜超过5秒钟);但必要时可诞生子线程去执行费时的函数。/ac01.java (myActivity)package com.misoo.kx02b;import android.app.Activity;import android.content.Intent;import android.gr

8、aphics.Color;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;public class ac01 extends Activity implements OnClickListener /private final int WC = LinearLayout.La

9、youtParams.WRAP_CONTENT; private TextView tx; private Button btn; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); LinearLayout.Layou

10、tParams param = new LinearLayout.LayoutParams(150, 40); param.topMargin = 5; tx = new TextView(this); tx.setTextSize(16); tx.setTextColor(Color.BLUE); tx.setBackgroundResource(R.drawable.x_yellow); layout.addView(tx, param); btn = new Button(this); btn.setText(Exit); btn.setBackgroundResource(R.draw

11、able.earth); btn.setOnClickListener(this); layout.addView(btn, param); this.setContentView(layout); /- String tna = Thread.currentThread().getName(); Thread.currentThread().setName(tna + -myActivity); /- myService.setUpdateListener(new UpdateUIListener(); Intent svc = new Intent(this, myService.clas

12、s); startService(svc); Override protected void onDestroy() super.onDestroy(); Intent svc = new Intent(this, myService.class); stopService(svc); class UpdateUIListener implements IListener public void update(String s) tx.setText(s); public void onClick(View v) this.finish(); IListener.javapackage com

13、.misoo.kx02b;public interface IListener public void update(String s);/myService.javapackage com.misoo.kx02b;import java.util.Timer;import java.util.TimerTask;import android.app.Service;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;public

14、class myService extends Service private static IListener plis; private static int k = 0; private Timer timer = new Timer(); private String tna; public Handler handler = new Handler() public void handleMessage(Message msg) plis.update(tna); ; Override public void onCreate() super.onCreate(); tna = Th

15、read.currentThread().getName(); TimerTask task = new TimerTask() Override public void run() handler.sendEmptyMessage(0); ; timer.schedule(task,1000, 4000); Override public IBinder onBind(Intent intent) return null; public static void setUpdateListener(IListener listener) plis = listener; 此程序输出:此结果说明

16、了,myActivity与myService两者都是由main thread所执行。二就一个SDK Service而言,都是由main thread执行myService的onCreate()、onBind()、onStart()等函数。 然而,是由独立的线程来执行myBinder:onTransact()函数。因为Binder System会从该进程的Thread pool里启动一个线程来执行SDK-Service的Binder接口对象(如myBinder)。二、 如果属于Remote Service。- 则myActivity与myService各在不同进程里执行,两者都是由各进程的mai

17、n thread所执行。亦即,两者是由不同的线程所执行。此情形下,两个类别里的函数也不宜太费时(例如不宜超过5秒钟);但必要时可诞生子线程去执行较费时的函数。- 所以由main thread(myService所在的进程的main thread)执行myService:onCreate()、myBinder:myBinder()和myService:onBind()。- 在Binding-time时,Binder System会建立myActivity与myBinder(即myService的Interface)之间的连结(Connection)。- 在IPC calling-time时,my

18、Activity的线程与myBinder的线程会同步(Synchronize),让myActivity开发者觉得IPC远程呼叫、跨进程的两个线程,就如同单一线程一般。-在送出IPC call时,执行myBinder对象的线程会执行myBinder:onTransact()函数。兹写个程序来说明之,此程序执行时,出现下述画面:按下上一个Button, 显示出main thread的执行路径:按下第二个Button, 显示出main thread执行onBind()函数:按下第三个Button, 显示出Binder System启用独立的thread执行onTransact()函数:兹列出程序代码

19、如下:/AndroidManifest.xml /ac01.javapackage com.misoo.kx02c;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.graphics.Color;import android.os.Bundle;import android.os.IB

20、inder;import android.os.Parcel;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;public class ac01 extends Activity implements OnClickListener private final int WC = LinearLayout.LayoutPara

21、ms.WRAP_CONTENT; private final int FP = LinearLayout.LayoutParams.FILL_PARENT; private Button btn, btn2, btn3, btn4; public TextView tv; private IBinder ib = null; public void onCreate(Bundle icicle) super.onCreate(icicle); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLa

22、yout.VERTICAL); btn = new Button(this); btn.setId(101); btn.setText(start service); btn.setBackgroundResource(R.drawable.heart); btn.setOnClickListener(this); LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(120, 50); param.topMargin = 10; layout.addView(btn, param); btn2 = new Button

23、(this); btn2.setId(102); btn2.setText(bind service); btn2.setBackgroundResource(R.drawable.heart); btn2.setOnClickListener(this); layout.addView(btn2, param); btn3 = new Button(this); btn3.setId(103); btn3.setText(IPC call); btn3.setBackgroundResource(R.drawable.heart); btn3.setOnClickListener(this)

24、; layout.addView(btn3, param); btn4 = new Button(this); btn4.setId(104); btn4.setText(exit); btn4.setBackgroundResource(R.drawable.heart); btn4.setOnClickListener(this); layout.addView(btn4, param); tv = new TextView(this); tv.setTextColor(Color.WHITE); tv.setText(); LinearLayout.LayoutParams param2

25、 = new LinearLayout.LayoutParams(FP, WC); param2.topMargin = 10; layout.addView(tv, param2); setContentView(layout); /- String tna = Thread.currentThread().getName(); Thread.currentThread().setName(tna + -ac01); /- private ServiceConnection mConnection = new ServiceConnection() public void onService

26、Connected(ComponentName className, IBinder ibinder) ib = ibinder; public void onServiceDisconnected(ComponentName className) ; public void onClick(View v) switch (v.getId() case 101: startService(new Intent(com.misoo.kx02c.REMOTE_SERVICE); break; case 102: bindService(new Intent(com.misoo.kx02c.REMOTE_SERVICE), mConnection, Context.BIND_AUTO_CREATE); break; case 103: Parcel pc = Parcel.obtain(); Parcel pc_reply = Parcel.obtain(); try ib.transact(1, pc, pc_reply, 0); tv.setText(pc_reply.readString()

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1