`
QCheng5453
  • 浏览: 16571 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android笔记——Day6 *Service初步 *利用序列化在Activity之间交换数据

 
阅读更多
昨天貌似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)用另一个ActivitygetIntent()得到的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控件的使用方法的,后来一想控件种类太多,就算是写了博客也是记不下来的,还是等用到的时候查看帮助文档或是网上查看相关资料辅助编程吧。--#

 


 



分享到:
评论

相关推荐

    Android学习笔记(十)——实现新闻列表

    【第一部分】历史文章: Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) ...Android学习笔记(七)——数据存储(共享参数Share

    Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    这篇“Android学习笔记——利用JNI技术在Android中调用、调试C++代码”将带你深入理解如何在Android应用中使用JNI来调用C++代码,以及如何进行调试。以下是对这一主题的详细阐述。 1. **JNI简介** JNI是Java平台的...

    Oracle学习笔记——day01

    Oracle数据库是世界上最流行的数据库管理系统之一,广泛用于企业级的数据存储和管理。在Oracle学习的第一天,我们主要关注了SQL语句,这是与Oracle交互的基础。SQL主要包括三种类型的语言:DML(数据操作语言)、DDL...

    安卓笔记——安卓详细笔记汇总

    - **活动(Activity)管理**:Activity的生命周期,启动模式,以及如何在不同的Activity之间进行跳转。 - **意图(Intent)机制**:Intent用于启动Activity或Service,传递数据,实现不同组件间的通信。 - **服务...

    Oracle学习笔记——day04

    在Oracle学习笔记的第四天,我们探讨了数据库管理和操作的一些核心概念,主要集中在DDL(数据定义语言)、DML(数据操作语言)、DCL(数据控制语言)以及事务管理。以下是对这些内容的详细阐述: 首先,我们看到了...

    Android开发笔记——模拟器、应用教程 pdf

    总之,这份"Android开发笔记——模拟器、应用教程"将引导你全面了解Android开发的核心技术和实践方法,无论你是初学者还是经验丰富的开发者,都可以从中受益。通过学习和掌握这些知识点,你将能够创建出高质量、适应...

    Android源码——小米便签源码.zip

    4. **序列化与反序列化**:为了在内存和磁盘之间交换数据,源码可能会包含Gson、Protobuf等序列化库的使用,这对于理解数据传输和持久化至关重要。 5. **异步处理**:Android应用通常会用到AsyncTask、...

    安卓Android源码——局域网简易云端笔记系统源码.zip

    4. **数据存储**:笔记数据可能被存储在SQLite数据库中,这是Android内置的轻量级数据库,便于本地数据管理。源码中会有对应的数据访问对象(DAO)类来操作数据库。 5. **用户界面**:UI设计通常由XML布局文件定义...

    安卓Android源码——NotePad便签.zip

    在NotePad中,笔记数据的保存是持久化的,即使应用关闭,数据依然存在。这是通过SQLite数据库实现的,展示了Android中数据持久化的基本方法。 8. **版本兼容性**: NotePad作为一个示例应用,考虑到了不同Android...

    FPGA自学笔记——设计与验证公开版

    ### FPGA自学笔记——设计与验证公开版 #### 1. FPGA技术背景与发展趋势 随着FPGA技术的不断发展,从最初的简单逻辑粘合逐渐演变为现在的可编程片上系统(SoC),FPGA的应用范围也在不断扩大。例如Altera(现已被...

    Android Training学习笔记——Navigation 参考源码

    在"Android Training学习笔记——Navigation 参考源码"中,作者可能详细解析了源码,展示了如何创建和配置Navigation Graph,以及如何在代码中使用`NavController`进行导航。可能还涵盖了如何调试和测试Navigation...

    Android开发笔记——UI基础编程

    这份"Android开发笔记——UI基础编程"的资料集包含了两部分:新版Android开发教程+笔记七--基础UI编程1.pdf和新版Android开发教程+笔记七--基础UI编程2.pdf,将深入讲解Android应用程序中用户界面的设计与实现。...

    基于Android Studio开发的笔记APP.rar

    使用Intent在Activity之间传递数据,例如从主界面启动笔记详情Activity时,将笔记ID通过Intent附加数据传递。还可以使用Parcelable或Serializable接口对复杂对象进行序列化,方便在Intent中传递。 6. **事件监听与...

    Android Activity学习笔记

    Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。本文将深入讲解Activity的生命周期、Activity之间的数据交互、Activity启动模式、Task和BackStack...

    Android Training学习笔记——Navigation 参考源码(ListView版)

    在Android应用开发中,Navigation组件是一个重要的工具,用于帮助用户在应用的不同目的地之间导航。这篇“Android Training学习笔记——Navigation 参考源码(ListView版)”深入探讨了如何使用Navigation构建一个...

    Android开发笔记——环境搭建

    在"新版Android开发教程&笔记四--Dalvik ADB.pdf"中,可能深入探讨了Dalvik的工作原理,以及如何利用ADB进行更高级的调试和问题排查。学习这部分内容可以帮助开发者更有效地理解和解决问题,提升开发效率。 总的来...

    Android源码——小米便签源码.7z

    在Android平台上,源码分析是理解应用程序工作原理和进行定制化开发的重要环节。"Android源码——小米便签源码.7z" 提供了小米公司官方便签应用的源代码,这为我们深入探究Android应用开发,特别是便签类应用的设计...

    Android学习笔记——Http通信 源码

    这篇"Android学习笔记——Http通信 源码"主要探讨了如何在Android应用中利用WebView控件加载网页以及使用ImageView控件加载网络图片,这两部分是Android应用与互联网交互的常见场景。 首先,我们来深入理解一下`...

    网络运维笔记——T221.pdf

    - **序号和确认号**:用于数据的序列化和确认,确保数据的有序和无损传输。 - **首部长度**:记录数据段的大小,包括首部和数据部分。 - **控制位**:如 URG、ACK、PSH、SYN、RST、FIN,分别用于紧急数据、确认、...

    Android开发笔记——模拟器、应用教程

    Android开发笔记,内容涉及模拟器参数、进程与线程、Android 释放手机资源,进程释放优先级、分析HelloAndroid、添加编辑框与按钮、使用Intent启动另一个Activity、在不同Task中启动Activity、Intent与Intent ...

Global site tag (gtag.js) - Google Analytics