Android之Activity之间的数据通信方式大全(一)
2015-09-29 23:20
405 查看
最近二期项目正在讨论需求,本人小小程序员只有搞搞维护的份。刚工作不久,技术经验不足,随时准备找份更好的工作,闲来无事,看看Android面试经典啥的,就看到有问Activity之间数据通信方式都有哪些(*只是Activity之间通信,不讨论Service、Broadcast),忽然想想自己也不是很确定了解的全不全。看了挺多文档,大多只涉及到其中几点,现在整理一下,共自己和大家参考,如有欠缺欢迎留言指正,本人热衷回帖,共同讨论学习。
Activity之间的数据通信方式主要有以下????种:
Intent
借助类的静态变量
借助全局变量/Application
借助外部工具
– 借助SharedPreference
– 使用Android数据库SQLite
– 赤裸裸的使用File
– Android剪切板
借助Service
(1) 在Intent跳转时携带数据
Intent是Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider)之间通信的纽带,在Intent中携带数据也是四大组件之间数据通信最常用、最普通的方式。常规写法如下:
更简洁,也是更智能的写法是:
在SecondActivity中获取intent跳转时携带的数据:
(2)借助类的静态变量来实现
由于类的静态成员可以通过“className.fileName”来访问,故而可以供两个Activity访问从而实现Activity之间的数据通信:
在MainActivity中:
在SecondActivity中:
看结果:
(3)借助全局变量来实现/Application
和类的静态变量类似,但是这个类作为单独第三个类(最好是写一个Application类):
在一个Activity中对类的静态变量进行访问和更改:
然后在另一个Activity中访问该变量,来验证这种通信方式:
看结果:
在前一个Activity中变更前的值:
在后一个Activity中变更后的值:
这是使用全局变量的本质,但是Java是编程思想不建议这样的写法,所以最好是将ForExampleClass继承Application,在应用的所有Activity都可以访问,并且要用get\set方法进行访问,可以看一下
@彬彬的博客Android使用全局变量和@邬良欢Android入门篇三:使用静态变量在Activity之间传递数据。
其实上边“(2)借助类的静态变量来实现”和“(3)借助全局变量来实现”很类似,只是在借助类的静态变量时接收信息的Activity中声明静态file,在别的Activity中做更改,而借助全局变量(建议继承Application,此时就是所谓的“使用Application”,因为Application类在本应用所有Activity中都可以访问,但是要注意内存泄漏的问题)是另外声明一个类,所有Activity共享这个类而已
————好了,一篇写不完了,剩下的下篇Android之Activity之间的数据通信方式大全(二)继续吧!
Activity之间的数据通信方式主要有以下????种:
Intent
借助类的静态变量
借助全局变量/Application
借助外部工具
– 借助SharedPreference
– 使用Android数据库SQLite
– 赤裸裸的使用File
– Android剪切板
借助Service
(1) 在Intent跳转时携带数据
Intent是Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider)之间通信的纽带,在Intent中携带数据也是四大组件之间数据通信最常用、最普通的方式。常规写法如下:
//创建用于封装数据的Bundle对象 Bundle bundle = new Bundle(); bundle.putString("name", "WangJie"); bundle.putInt("age", 23); Intent intent = new Intent(MainActivity.this, SecondActivity.class); //将Bundle对象嵌入Intent中 intent.putExtras(bundle); startActivity(intent);
更简洁,也是更智能的写法是:
//创建Intent对象 Intent intent = new Intent(MainActivity.this, SecondActivity.class); //程序自动创建Bundle,然后将对Intent添加的数据装载在Bundle中,对用户透明 intent.putExtra("name", "WangJie"); intent.putExtra("age", 23); startActivity(intent);
在SecondActivity中获取intent跳转时携带的数据:
//intent要用this的getIntent()获取 Intent intent = getIntent(); //用intent.getXXXExtra("key-name")或是intent.getXXXExtra("key-name", default-value)获取值 String name = intent.getStringExtra("key1"); int age = intent.getIntExtra("key2", 0);
(2)借助类的静态变量来实现
由于类的静态成员可以通过“className.fileName”来访问,故而可以供两个Activity访问从而实现Activity之间的数据通信:
在MainActivity中:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //先查看一下未更改的值 SecondActivity.age = 23; Button btn = (Button) findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //到SecondActivity中查看对age更改是否有效 Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); } }
在SecondActivity中:
public class SecondActivity extends AppCompatActivity { //声明为静态file static int age = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); //在MainActivity中更改了age,所以这里肯定不是"1" Toast.makeText(this, "在MianActivity中更改了age后的值 = " + age, Toast.LENGTH_SHORT).show(); } }
看结果:
(3)借助全局变量来实现/Application
和类的静态变量类似,但是这个类作为单独第三个类(最好是写一个Application类):
public class ForExampleClass { //此处声明一个public static 成员来实现数据通信 public static int age = 0; }
在一个Activity中对类的静态变量进行访问和更改:
//先查看一下未更改的值 Toast.makeText(this, "age = " + ForExampleClass.age, Toast.LENGTH_SHORT).show(); //在一个Activity中对类的静态变量进行变更 ForExampleClass.age = 23;
然后在另一个Activity中访问该变量,来验证这种通信方式:
//在另一个Activity中访问更改后的变量来验证 Toast.makeText(this, "更改后的age = " + ForExampleClass.age, Toast.LENGTH_SHORT).show();
看结果:
在前一个Activity中变更前的值:
在后一个Activity中变更后的值:
这是使用全局变量的本质,但是Java是编程思想不建议这样的写法,所以最好是将ForExampleClass继承Application,在应用的所有Activity都可以访问,并且要用get\set方法进行访问,可以看一下
@彬彬的博客Android使用全局变量和@邬良欢Android入门篇三:使用静态变量在Activity之间传递数据。
其实上边“(2)借助类的静态变量来实现”和“(3)借助全局变量来实现”很类似,只是在借助类的静态变量时接收信息的Activity中声明静态file,在别的Activity中做更改,而借助全局变量(建议继承Application,此时就是所谓的“使用Application”,因为Application类在本应用所有Activity中都可以访问,但是要注意内存泄漏的问题)是另外声明一个类,所有Activity共享这个类而已
————好了,一篇写不完了,剩下的下篇Android之Activity之间的数据通信方式大全(二)继续吧!
相关文章推荐
- 传感器的使用:加速度传感器
- 新东西009--Android ListView下CheckBox、Edittext状态记录
- Android开发笔记——调用系统安装工具安装APK
- Android自定义控件之自定义属性的添加 -(2)
- 关于Android LayoutInflater详解及空指针问题
- Android基础学习之BroadcastRceiver广播
- Android和JavaScript互相调用分析
- Android Intent全面解析
- Android适配器进阶之一(单类型抽象适配器)
- Android Studio快捷键
- android--图片的水平自动切换
- Android 友盟社会化组件-分享实现
- 获取手机中的视频
- android--计时器(Timer)
- android dialog left_icon
- android中相对布局入门
- Android屏幕适配及周边
- Android --学习笔记
- Android基础入门教程——2.5.3 AlertDialog(对话框)详解
- listview中嵌套gridview