Intent与Bundle的共同点:都继承Parcelable
Intent传值与Bundle传值的区别
eg:我现在要从A界面 跳转到B界面或者C界面
这样的话 我就需要写2个Intent 如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法 那么 如果我用1个Bundle 直接把值先存里边 然后再存到Intent中 就更简洁吗?
eg: 如果我现在有 Activity A ,B ,C;
现在我要把值通过A经过B传给C
你怎么传 如果用Intent的话 A-B先写一遍 再在B中都取出来 然后在把值塞到Intent中 再跳到C 累吗?
如果我在A中用了 Bundle 的话 我把Bundle传给B 在B中再转传到C C就可以直接去了
这样的话 还有一个好处 就是在B中 还可以给Bundle对象添加新的 key - value 同样可以在C中取出来
Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。在Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。
理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似,只是复用的粒度有所差别;另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。另外Intent除了发送外,还可用于广播,这些都将在后文进行详细讲述。
Intent和Bundle实现从一个Activity带参数转换到另一个Activity的代码例子
1 if(et_username.getText().toString().equals("peidw") && et_password.getText().toString().equals("123456") ){ 2 Intent = new Intent(); 3 Bundle bundle = new Bundle(); 4 bundle.putString("USERNAME", et_username.getText().toString()); 5 intent.putExtras(bundle); 6 intent.setClass(loginactive.this, informationactive.class); 7 startActivity(intent); 8 }else{ 9 intent = new Intent(); 10 intent.setClass(loginactive.this, errorpageactive.class); 12 startActivity(intent); 13 }
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 this.setContentView(R.layout.informationactive); 4 tv = (TextView)findViewById(R.id.first_page_info); 5 Bundle bundle = this.getIntent().getExtras(); 6 String str=bundle.getString("USERNAME"); 7 tv.setText(str); 8 button_back = (Button)findViewById(R.id.back); 9 button_back.setOnClickListener(new OnClickListener() { 10 public void onClick(View view) { 11 Intent intent = new Intent(); 12 intent.setClass(informationactive.this,mainactive.class); 13 startActivity(intent); 14 } 15 });
SharedPreferences是一种轻量级的数据存储机制,它将一些简单数据类型的数据,包括boolean类型、int类型、float类型、long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录(/data/data/<包名>/shared_prefs/中。这种Preferences机制广泛应用于存储应用 程序中的配置信息。
在Adndroid平台上,只需要用一个Context的对象调用getSharedPreferences(String name,int mode)方法传入Preferences文件名和打开模式,就可以获得一个SharedPreferences的对象。若该Preferences文件不存在,在提交数据后会创建该Preferences文件。利用SharedPreferences对象可以调用一些getter方法,传入相应的键来读取数据。要对Preferences文件的数据进行修改,首先利用SharedPreferences对象调用edit方法获得一个内部类Editor的对象,然后用这个Editor对象就可以对Preferences文件进行编辑了。注意,编辑完毕后一定要调用commit()方法,这样才会把所做的修改提交到Preferences文件当中去。下面是一个利用Preferences机制来保存Editor中所输入的字符串的示例。
1 package com.action; 2 3 import android.app.Activity; 4 import android.content.SharedPreferences; 5 import android.os.Bundle; 6 import android.widget.EditText; 7 8 public class Tab extends Activity { 9 EditText edit; 10 SharedPreferences sp; 11 final static String NAME = "my_sp"; 12 final static String EDIT_KEY = "edit"; 13 14 /** Called when the activity is first created. */ 15 @Override 16 public void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.main); 19 20 edit = (EditText) findViewById(R.id.edit); 21 sp = getSharedPreferences(NAME, 0); 22 String str = sp.getString(EDIT_KEY, null); 23 if(str != null){ 24 edit.setText(str); 25 } 26 } 27 @Override 28 protected void onDestroy() { 29 super.onDestroy(); 30 SharedPreferences.Editor editor = sp.edit(); 31 editor.putString(EDIT_KEY, String.valueOf(edit.getText())); 32 editor.commit(); 33 34 } 35 }
SharedPreference数据以XML格式存放的。我们可以在 File Explorer中找到,目录为:data/data/包路径/shared_prefs