- 浏览: 15885 次
最新评论
Android笔记——Day6 *Service初步 *利用序列化在Activity之间交换数据
- 博客分类:
- Android笔记
昨天貌似ITEYE用CSDN的号登不上去,博客没法写了,现在又好了--#
1、Service初步
参考http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html
••Activity是前台,有界面;Service是后台,无界面。
••Android中实现Service一般有两种方式:
1) 直接调用startService()启动一个Service;
*1、定义一个继承Service的子类并覆写其中的onBind(),onCreate等方法;
public class myService extends Service{ @Override public IBinder onBind(Intent arg0) { Log.e("SERVICE","service onBind"); return data; } @Override public void onCreate(){ super.onCreate(); Log.e("SERVICE","serice created"); new Thread(){ public void run(){ //比较好的是启动一个新的线程 } }.start(); } @Override //按理override可写可不写,貌似我没写就不运行onDestory()函数了--# public void onDestroy() { super.onDestroy(); } public boolean onUnbind(Intent intent){ super.onUnbind(intent); return true; } }
注意该Service的生命周期为:
onCreate()->onStartCommand()->onDestory()
由于该Service并不是由绑定生成的,如果不执行stopService()函数,即使改程序退出了, Service仍然存在。
*2、在AndroidManifest.xml文件中配置该Service;
<service android:name=".myService"> <intent-filter> <action android:name="com.seu.myService.ACCOUNT_SERVICE"/> </intent-filter> </service>
*3、利用Intent对象启动该Service;
Intent intent = new Intent(); intent.setAction("com.seu.myService.ACCOUNT_SERVICE"); startService(intent);//启动一个Service; stopService(intent); //停止一个Service;
2绑定本地Service并与之通信。
利用该方法启动Service可以比较方便的在Service和Activity之间进行数据交换。
*1、自定义一个继承Service的子类,并根据需求定义一个继承Binder的内部类;重写 onBind()方法并返回该Binder子类对象。
public class myService extends Service{ private int count = 0; MyBinder data = new MyBinder();//定义一个Binder子类对象 public class MyBinder extends Binder { public int getcount(){ return count; } } @Override public IBinder onBind(Intent arg0) { Log.e("SERVICE","service onBind"); return data; //绑定时会将data返回给ServiceConntected对象中的onServiceconntected函数参数。 } public void onCreate(){ super.onCreate(); Log.e("SERVICE","serice created"); new Thread(){ public void run(){ while(count<=1000){ count++; try{ Thread.sleep(1000); }catch (Exception e) { // TODO: handle exception } } } }.start(); } @Override public void onDestroy() { super.onDestroy(); Log.e("SERVICE","Service is Destroyed"); } public boolean onUnbind(Intent intent){ super.onUnbind(intent); Log.e("SERVICE","unBinded"); return true; } }
*2、配置AndroidManifest.xml文件。
<service android:name=".myService"> <intent-filter> <action android:name="com.seu.myService.ACCOUNT_SERVICE"/> </intent-filter> </service>
*3、在Activity中定义一个ServiceConntected对象,调用bindService()函数绑定一个Service并启动,调用unBindService()函数解除绑定。
public class FirstServiceActivity extends Activity { myService.MyBinder BI = null; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub Log.e("SERVICE","service disconnected"); } @Override public void onServiceConnected(ComponentName name, IBinder service) { //Service中的data作为IBinder参数传递进来进而进行数据交流。 // TODO Auto-generated method stub Log.e("SERVICE","service connected"); BI =(myService.MyBinder)service; } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button start , stop , print; start = (Button)findViewById(R.id.start); stop = (Button)findViewById(R.id.stop); print = (Button)findViewById(R.id.print); final Intent intent = new Intent(); intent.setAction("com.seu.myService.ACCOUNT_SERVICE"); start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { bindService(intent , conn , Service.BIND_AUTO_CREATE); //启动该Service } }); stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub unbindService(conn); //解除绑定 } }); print.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.e("SERVICE",BI.getcount()+" "); // TODO Auto-generated method stub } }); } } //比较好的习惯是在Activity的onDestory()函数中进行Service的解除绑定工作该方法中Service的生命周期:
onCreate()->onBind()->onUnbind()->onDestory()
2、 利用序列化在Activity之间交换数据
••我觉得利用序列化在Activity之间进行数据交换真的是一个比较方便的方法。
••具体步骤如下
1) 将需要进行交换的类实现Serializable接口
public class suibian implements Serializable{ private int name = 1; public void changename(int o){ name = o; } public int getname(){ return name; } //需要注意的是如果该类中有某类的对象,那么该类也必须先实现Serializable接口
2)直接用Intent对象的putExtra()方法放入对象。
public class SerActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button next = (Button)findViewById(R.id.next); next.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { suibian sss = new suibian(); sss.changename(100); Intent intent = new Intent(); intent.setClass(SerActivity.this, second.class); intent.putExtra("suibian", sss); startActivity(intent); // TODO Auto-generated method stub } }); } }
3)用另一个Activity中getIntent()得到的Intent执行getSerializableExtra()方法得到该对象。
public class second extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); suibian sss = null; setContentView(R.layout.second); Intent intent = getIntent(); sss =(suibian)intent.getSerializableExtra("suibian"); Log.e("SSS",""+sss.getname());//测试成功 } }
3、Spinner控件
本来是想写Spinner控件的使用方法的,后来一想控件种类太多,就算是写了博客也是记不下来的,还是等用到的时候查看帮助文档或是网上查看相关资料辅助编程吧。--#
发表评论
-
SurfaceView的使用
2012-09-07 18:51 869SurfaceView的使用 先贴上几个地址: ht ... -
传感器的应用开发
2012-09-07 14:55 627传感器的应用开发 先贴几个地址 http://www ... -
Android笔记——NewDay1 AppWidget的一个更新小问题
2012-08-20 19:17 808之前在写一个AppWidget,需要根据按键显示不同的内容,其 ... -
Android笔记——Day10 *popUpWindow基本使用 *Notification基本使用
2012-07-20 07:40 931前十天去了北京,今天 ... -
Android笔记——Day9 *Android异步操作 *Http操作基础 *ListView使用方法
2012-07-07 18:34 10671、Android异步操作 ··之前说过用Threa ... -
Android笔记——Day8 *Animation的使用 *实现用户定位
2012-07-07 00:21 814反正每天看看Mars老师视频,完了自己在总结一下,感觉挺好的- ... -
Android笔记——Day7 *AppWidget的使用初步 *Android文本输入输出时的中文编码问题
2012-07-05 02:31 9031、AppWidget的使用初步 先贴个地址,这个地址里面 ... -
Android笔记——Day5 *SQLite基本用法 *Broadcast广播机制 *WiFi基础
2012-07-01 00:38 1316//本文中代码基本上是Ma ... -
Android笔记——Day4 *Android对SD卡的操作
2012-06-29 23:03 1676前两天去苏州玩了,今天终于又可以学Android写博客了--# ... -
Android笔记——Day3 *异常处理 *Java中的io *匿名内部类
2012-06-27 10:03 10161、异常处理。 ··Java中含有异常处理机制。 ·· ... -
Android笔记——Day2 *Java中类的继承 *多线程Handler
2012-06-25 22:48 8791、Java中类的继承。 ··Java中类的继承所产生的访 ... -
Android笔记——Day1 *Activity生命周期 *Activiity切换效果
2012-06-24 22:37 10701、Android中Activity的生命周期。 http ...
相关推荐
Oracle学习笔记——day01 学习的好东西Oracle学习笔记——day01
Oracle学习笔记——day02 学习的好东西 Oracle学习笔记——day02
Oracle学习笔记——day04 学习的好东西 Oracle学习笔记——day04
Oracle学习笔记——day05 学习的好东西 Oracle学习笔记——day05
Oracle学习笔记——day03 学习的好东西 Oracle学习笔记——day03
Android学习笔记——获取网络图片并显示
【第一部分】历史文章: Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) ...Android学习笔记(七)——数据存储(共享参数Share
Android开发笔记——模拟器、应用教程 pdf Android开发笔记——模拟器、应用教程 pdf
FPGA自学笔记——设计与验证公开版;十分适合初学者使用
Android开发笔记,内容涉及模拟器参数、进程与线程、Android 释放手机资源,进程释放优先级、分析HelloAndroid、添加编辑框与按钮、使用Intent启动另一个Activity、在不同Task中启动Activity、Intent与Intent ...
——————————————————————————————————————————————
Android开发者学习笔记——View、Canvas、bitmap
网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx网络运维笔记——T221.docx
网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维笔记——T221.pdf网络运维...
Android Training学习笔记——Navigation 参考源码,文章地址:http://blog.csdn.net/xroocky/article/details/50804762
Solidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——随形变化.docxSolidworks学习笔记——...
安卓Android源码——局域网简易云端笔记系统源码.zip
遗传算法笔记——7.pdf遗传算法笔记——7.pdf遗传算法笔记——7.pdf遗传算法笔记——7.pdf遗传算法笔记——7.pdf遗传算法笔记——7.pdf遗传算法笔记——7.pdf遗传算法笔记——7.pdf