赞
踩
最近研究了一个android的service,现在做一下总结。
其实要了解service,我建议不要去到网上看,因为什么呢。网上好多的写的东西都是你抄我,我抄你,都差不多。我建议直接看android的官方文档,只要仔细看了,差不多都能理解,而且官方文档上面还有一些sample。下面我们来一起总结,我打算从以下几个方面来介绍service。
- <serviceandroid:name="com.lee.demo.service.NetworkService">
- <intent-filter>
- <actionandroid:name="com.lee.demo.service.networkservice"/>
- <categoryandroid:name="android.intent.category.default"/>
- </intent-filter>
- </service>
- public class NetworkService extends Service
- {
- public static final String ACTION_NETWORKSERVICE = "com.lee.demo.service.networkservice";
- private String m_bmpUrl = "http://hiphotos.baidu.com/keyj00/pic/item /816bf9accd05543e4a36d6a6.jpg";
- private ServiceBinder m_serviceBinder = new ServiceBinder();
- private Bitmap m_bitmap = null;
-
- public class ServiceBinder extends Binder implements INetworkService
- {
- @Override
- public Object getData()
- {
- return m_bitmap;
- }
- }
-
- @Override
- public IBinder onBind(Intent intent)
- {
- return m_serviceBinder;
- }
-
- public void onCreate()
- {
- new Thread(null, new Runnable()
- {
- @Override
- public void run()
- {
- getBitmapFromNet();
- }
- }, "GetBitmapFromNetwork").start();
-
- super.onCreate();
- }
-
- protected void getBitmapFromNet()
- {
- m_bitmap = BitmapUtility.getBitmapFromNet(m_bmpUrl);
- if (null != m_bitmap)
- {
- this.sendBroadcast(new Intent(NetworkReceiver.ACTION_RECEIVER));
- }
- }
- ......
- }
再看看activity里面如何使用这个Service。这里先new一个ServiceConnection类的对象,后面bindService时会用到。
- public class NetworkActivity extends Activity
- {
- // The receiver to recive broadcase from service.
- private NetworkReceiver m_receiver = new NetworkReceiver();
- private INetworkService m_networkService = null;
-
- private ServiceConnection m_serviceConn = new ServiceConnection()
- {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service)
- {
- // 这里先把这个连接保存起来。
- m_networkService = (INetworkService)service;
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name)
- {
- }
- };
-
- public void onCompleteService()
- {
- if (null != m_networkService)
- {
- // 从Binder中去取数据
- Bitmap bmp = (Bitmap)m_networkService.getData();
- if (null != bmp)
- {
- // ......
- }
- }
- }
-
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.network_service);
- this.bindService(new Intent(NetworkService.ACTION_NETWORKSERVICE), m_serviceConn, BIND_AUTO_CREATE);
- this.registerReceiver(m_receiver, new IntentFilter(NetworkReceiver.ACTION_RECEIVER));
- }
-
- @Override
- protected void onDestroy()
- {
- this.unbindService(m_serviceConn);
- this.unregisterReceiver(m_receiver);
- super.onDestroy();
- }
- }
再看看Receiver如何实现:
- public class NetworkReceiver extends BroadcastReceiver
- {
-
- public static final String ACTION_RECEIVER ="com.lee.demo.service.networkreceiver";
-
- @Override
- public void onReceive(Context context, Intent intent)
- {
- if (context instanceof NetworkActivity)
- {
- // 这里调用activity的方法来操作UI的东西。
- ((NetworkActivity)context).onCompleteService();
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。