通过Application传递数据

1:通过Application传递数据

         假如有一个Activity A, 跳转到 Activity B ,并需要推荐一些数据,通常的作法是Intent.putExtra() 让Intent携带,或者有一个Bundle把信息加入Bundle让Intent推荐Bundle对象,实现传递。但这样作有一个问题在 于,Intent和Bundle所能携带的数据类型都是一些基本的数据类型,如果想实现复杂的数据传递就比较麻烦了,通常需要实现 Serializable或者Parcellable接口。这其实是Android的一种IPC数据传递的方法。如果我们的两个Activity在同一个 进程当中为什么还要这么麻烦呢,只要把需要传递的对象的引用传递过去就可以了。

        基本思路是这样的。在Application中创建一个HashMap ,以字符串为索引,Object为value这样我们的HashMap就可以存储任何类型的对象了。在Activity A中把需要传递的对象放入这个HashMap,然后通过Intent或者其它途经再把这索引的字符串传递给Activity B ,Activity B 就可以根据这个字符串在HashMap中取出这个对象了。只要再向下转个型 ,就实现了对象的传递。

2:Application数据缓存

  我一般会习惯在application中建立两个HashMap一个用于数据的传递,一个用于缓 存一些数据。比如有一个Activity需要从网站获取一些数据,获取完之后我们就可以把这个数据cache到Application 当中,当页面设置到其它Activity再回来的时候,就可以直接使用缓存好的数据了。但如果需要cache一些大量的数据,最好是cache一些 (软引用)SoftReference ,并把这些数据cache到本地rom上或者sd卡上。如果在application中的缓存不存在,从本地缓存查找,如果本地缓存的数据也不存在再从网 络上获取。

3:PitFalls(陷阱、易犯的错误)

  使用Application如果保存了一些不该保存的对象很容易导致内存泄漏;因此数据传递完成之后,把存放在application的HashMap中的数据要及时remove掉。如果在Application的onCreate中执行比较 耗时的操作,将直接影响的程序的启动时间。这些清理工作不能依靠onTerminate完成,因为android会尽量让你的程序一直运行,所以很有可能 onTerminate不会被调用。

转载于:https://www.cnblogs.com/genggeng/p/7366222.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Java 代码例子,演示如何在两个 servlet 中使用 application 传递数据: 在第一个 Servlet 中,将需要传递的数据存储到 ServletContext 中: ``` public class FirstServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取 ServletContext 对象 ServletContext context = getServletContext(); // 存储需要传递的数据到 ServletContext 中 String data = "Hello, World!"; context.setAttribute("data", data); // 跳转到第二个 Servlet RequestDispatcher dispatcher = request.getRequestDispatcher("/SecondServlet"); dispatcher.forward(request, response); } } ``` 在第二个 Servlet 中,从 ServletContext 中获取第一个 Servlet 中存储的数据: ``` public class SecondServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取 ServletContext 对象 ServletContext context = getServletContext(); // 从 ServletContext 中获取第一个 Servlet 中存储的数据 String data = (String) context.getAttribute("data"); // 输出数据到响应中 response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println("Data from FirstServlet: " + data); } } ``` 在这个例子中,当用户访问第一个 Servlet 时,我们将需要传递的数据存储到 ServletContext 中,并且使用 RequestDispatcher 跳转到第二个 Servlet。当用户访问第二个 Servlet 时,我们从 ServletContext 中获取第一个 Servlet 中存储的数据,并输出到响应中。 需要注意的是,在整个 web 应用程序中,ServletContext 对象是唯一的,因此存储在其中的数据在整个应用程序中都是可见的。为了避免数据冲突和安全问题,我们需要小心地使用 ServletContext 中的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值