美文网首页
8Activity间传递数据

8Activity间传递数据

作者: 水固态中 | 来源:发表于2018-01-28 00:00 被阅读0次

Activity之间传递数据一般通过以下几种方式实现:

  1. 通过intent传递数据
  2. 通过Application
  3. 使用单例
  4. 静态成员变量。(可以考虑 WeakReferences)
  5. 持久化(sqlite、share preference、file等)

一、通过intent传递数据

  1. 直接传递,intent.putExtra(key, value)
  2. 通过bundle,intent.putExtras(bundle);

注意:

  1. 这两种都要求传递的对象必须可序列化(Parcelable、Serializable)
  2. 通过intent传递数据是有大小限制滴,超过限制,要么抛异常,要么新的Activity启动失败,如果传递图片要转换成byte[ ]。

实例

类实现Serializable接口

public class NewsBean implements Serializable
    {

第一个activity

NewsResultBean.NewsBean newsBean=newsBeanList.get(position);
Intent intent=newIntent(ActivityNewsList.this,ActivityNewsArticle.class);
Bundle bundle=new Bundle();
bundle.putSerializable("newsBean",newsBean);
//将数据放进其intent中
intent.putExtras(bundle);
startActivity(intent);

接收数据

Intent intent=getIntent();
Bundle bundle=intent.getExtras();
NewsResultBean.NewsBean newsBean=(NewsResultBean.NewsBean) bundle.getSerializable("newsBean");

二、Application

有时候,两个页面之间没有跳转关系,但是这两页面之间却需要传递一些数据,甚至说某个页面获得的数据要被之后的很多页面拿来使用,这个时候就需要applicaiton。
application是与应用程序的生命周期一致的,即只要应用程序不关掉,他就会存活。只有应用程序退出了它才会给销毁。
但是需要注意的是:
当由于某些原因(比如系统内存不足),我们的app会被系统强制杀死,此时再次点击进入应用时,系统会直接进入被杀死前的那个界面,制造一种从来没有被杀死的假象。那么问题来了,系统强制停止了应用,进程死了,那么再次启动时Application自然新的,那里边的数据自然木有啦,如果直接使用很可能报空指针或者其他错误。
因此还是要考虑好这种情况的:

  1. 使用时一定要做好非空判断
  2. 如果数据为空,可以考虑逻辑上让应用直接返回到最初的activity,比如用 FLAG_ACTIVITY_CLEAR_TASK 或者 BroadcastReceiver 杀掉其他的activity。

创建application子类

public class MyApplication extends Application {
    private String str;
    private int myInt;
    
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
}

设置数据

//返回当前activity的applicaiton对象
mapp=(MyApplication) getApplication();
mapp.setStr("张三");

获得数据

mapp=(MyApplication) getApplication();
String str=mapp.getStr();

三、使用单例

public class DataHolder {
  private String data;
  public String getData() {return data;}
  public void setData(String data) {this.data = data;}
  private static final DataHolder holder = new DataHolder();
  public static DataHolder getInstance() {return holder;}
}

设置数据

DataHolder.getInstance().setData(data);

获得数据

String data = DataHolder.getInstance().getData();

五、持久化数据

那就是sqlite、share preference、file等了。
优点:
(1)应用中所有地方都可以访问
(2)即使应用被强杀也不是问题了
缺点:
(1)操作麻烦
(2)效率低下
(3)io读写嘛,其实还是比较容易出错的

相关文章

  • 8Activity间传递数据

    Activity之间传递数据一般通过以下几种方式实现: 通过intent传递数据 通过Application 使用...

  • Activity间传递数据

    Activity间传递对象需要序列化 Activity //在一个Activity中创建Intent对象,并配置参...

  • Activity间传递数据

    1.正向传递数据  当我们通过startActivity(Intent)来启动Activity的时候,可以利用传入...

  • Flink通信机制

    flink内部通信机制 Operator间的数据传递本地线程数据传递远程线程数据传递同一线程的Operator数据...

  • Vue组件间数据传递

    前言 总结vue组件间的数据传递 路由传参 父组件传递数据给子组件---props 子组件传递数据给父组件---$...

  • Vue中组件间传值总结 ------ 2020-05-17

    父子组件间传递数据的方式 1、父组件向子组件传递数据 2、子组件向父组件传递数据 3、父子组件相互传递同一数据的两...

  • Vue组件间传递数据

    组件是Vue很强大的一个功能,所以掌握Vue组件之间的信息传递很重要。大致分为三种常见的情况。 父组件向子组件传递...

  • 备忘:Activity间传递数据

    基本类型参数传递Activity间传递一些基本类型的数据可以直接进行传递,比如直接通过intent传递 List对...

  • 安卓开发第四行代码:Android图形用户界面

    Android图形用户界面 上次课我们学习了Activity间如何传递数据,如何传递数据以及Activity的生命...

  • react学习第三篇:state,hooks,context

    一、props和state的区别 props是对外的接口(组件间传递数据),state是对内的接口(组件内传递数据...

网友评论

      本文标题:8Activity间传递数据

      本文链接:https://www.haomeiwen.com/subject/nfaoaxtx.html