`
zcwfeng
  • 浏览: 106611 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

Android的Activity共享变量的另一种做法

 
阅读更多

--------------------------------------------------------

注意:这种做法对于activity比较少,只有两三个,并且context生命周期比较长,根本不怎么起作用。解决不了OOM

-----------------------------------------------------------

感觉用这种方式存储登录信息比较好,比SharedPreferences存储登录信息的状态比较合适。

相当于存储session的数据(打个比喻)。

多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
用SharedPreferences存储的话关闭应用的时候这个值还是最后一次设置的值,如果是非正常退出程序时登录状态就会有问题,所以在使用上感觉application context是最合适存储当前登录状态的信息,当然可是存储一些相当于session当中存储的值,因为关闭应用后这些值就没有了。

package org.mdx.core.modules;

import android.app.Application;

public class ApplicationHelper extends Application {

private boolean session_enter = false; // 默认为false

/**
* 设置session状态
*
* @param bol
* true为以登录,false未登录
*/
public void putSession(boolean bol) {
session_enter = bol;
}

/**
* 是否登录
*
* @return true是,false否
*/
public boolean isEnter() {
return session_enter;
}

}

在AndroidManifest.xml的application加个name属性就可以了,如下面所示:
<application android:name=".core.modules.ApplicationHelper"
android:icon="@drawable/icon" android:label="@string/app_name">


activity使用时:(这个是重点)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getApplicationContext().putSession(false); // 设置登录状态为退出
}
public ApplicationHelper getApplicationContext() {
return ((ApplicationHelper) super.getApplicationContext());
}

分享到:
评论

相关推荐

    android实现activity直接的传值问题

    另一种传递复杂对象的方式是实现Serializable接口,但这比Parcelable效率低,不推荐在性能敏感的场景下使用。 六、使用Application或BaseActivity 如果数据需要全局访问,可以创建自定义Application类或...

    android Activity之间的数据传递

    - **Serializable接口**:另一种传递复杂数据的方式是实现Serializable接口,但相比于Parcelable,其序列化和反序列化速度较慢。 - **Bundle**:可以使用Bundle对象存储数据,然后在Intent中传递,适用于多类型数据...

    Activity之间的跳转项目案例实现

    在Android应用开发中,Activity是构成应用程序的基本单元,它代表了用户可以交互的一个屏幕。"Activity之间的跳转项目案例实现"这个主题主要关注如何在不同的Activity之间切换,并且在跳转过程中传递数据。这里我们...

    Android Activity之间的跳转以及数据的交互传递

    数据库,如SQLite,是另一种常见的数据存储方式,尤其适合存储结构化的大量数据。在Activity之间传递数据库数据时,通常先读取数据到内存,然后通过Intent传递,或者在需要的时候再从数据库中查询。 了解了这些基础...

    Android中用Application类实现全局变量

    我们也可以在另一个Activity中使用同样的方式来获取和操作全局变量: ```java package com.tianjf; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class Another...

    android 实例 Activity 之间通过 Handler 通信

    首先,创建一个Handler实例,并重写handleMessage()方法,这里会处理从另一个Activity发送过来的消息。例如: ```java public class SenderActivity extends AppCompatActivity { private Handler mHandler = new ...

    Android例子源码Activity间的数据传递

    4. **Serializable接口**: 另一个传递复杂对象的方式是实现Serializable接口,但这通常比Parcelable效率低。因此,除非有特殊需求,否则推荐使用Parcelable。 5. **Bundle**: Intent的extras实际上是一个Bundle对象...

    android中activity管理及界面传值

    另一种方式是使用`Bundle`对象,它可以存储各种类型的数据,并在启动Activity时通过Intent传递。在源Activity中: ```java Bundle bundle = new Bundle(); bundle.putString("key", "value"); Intent intent = new...

    注册界面(Activity的应用和数据传递)

    在实际应用中,我们常常需要在不同的`Activity`之间传递数据,比如在本例中的"注册界面",用户填写的各种信息就需要从一个`Activity`传递到另一个`Activity`进行处理。下面将详细阐述`Activity`的应用以及如何在它们...

    android 14.Activity之间的Inter-process沟通

    在给定的部分代码中,可以看到Intent被用来启动另一个Activity,这是Android中最常见的IPC形式之一。 1. **Intent**: Intent是Android中的一种消息对象,用于启动其他组件(如Activity、Service)或传递数据。在`...

    Android Activity之间的数据传递方法总结

    当需要从目标Activity返回结果时,可以使用startActivityForResult()启动另一个Activity,然后在目标Activity中调用setResult()设置结果,最后在原始Activity中重写onActivityResult()方法接收结果。 总结来说,...

    android 传值回调

    其次,Bundle是另一种存储和传递数据的方式,它与Intent结合使用。Intent的putExtras()和getExtras()方法可以用来添加和读取Bundle中的数据。这适用于大量数据或者需要更灵活控制数据结构的情况。 除此之外,...

    android 广播,界面传值示例

    广播是Android系统中的一种全局通知机制,用于在应用程序之间传递消息。界面传值则涉及到Activity、Fragment或者Service之间的数据交换。在这个"android 广播,界面传值示例"中,我们将深入探讨这两个主题。 首先,...

    Android-Activity:Activity之间传输数据

    - 当从一个`Activity`启动另一个`Activity`并期望在返回时获取结果时,可以使用`startActivityForResult()`。在`Intent`中设置请求码,然后在接收端通过`onActivityResult()`回调处理返回数据。 8. **使用EventBus...

    activity_data_change.rar_Change_android数据传递

    // 在另一个Activity中访问静态变量 String value = SourceActivity.sharedValue; ``` 4. **Parcelable**: 当需要传递复杂对象(如自定义类实例)时,可以实现Parcelable接口。Parcelable比Serializable效率更高,...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    Android两个子线程之间的通信

    6. **LiveData和ViewModel**:在Android架构组件中,LiveData是一种观察者模式的实现,可以在生命周期感知的基础上实现线程间的通信,特别适用于Activity、Fragment和Service之间的数据同步。 7. **...

    Activity之间UI的另类\"更新\"

    3. **ViewModel**:ViewModel是另一种Architecture Component,它的生命周期比Activity和Fragment更长,可以在配置更改(如屏幕旋转)时保持数据。两个Activity可以共享同一个ViewModel,这样就可以在其中存储需要跨...

    05-01 从A的activit传递数据到B的activity常用的3种方式

    Intent是Android系统用来启动另一个组件(如Activity)的类。我们可以在Intent对象中添加额外的数据,然后通过startActivity(Intent)方法传递给目标Activity。具体操作如下: - 在A Activity中创建Intent对象,...

    必看Android 500道高薪面试题集

    run()方法是线程体内容,需要在另一个线程的上下文中调用,而start()方法会创建线程并调用run()。 7. Final、finally、finalize()的区别:final用于声明常量或修饰类、方法和变量,禁止被继承、重写或重新赋值;...

Global site tag (gtag.js) - Google Analytics