`
stephen830
  • 浏览: 2998088 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android中Application类用法

 
阅读更多

 

Android中Application类用法

 

Application

Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。

Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。

通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。

启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。

Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。

应用场景:

在Android中,可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放掉。

实现步骤:

1、继承Application

public class CustomApplication extends Application
{
    private static final String VALUE = "Harvey";
    
    private String value;
    
    @Override
    public void onCreate()
    {
        super.onCreate();
        setValue(VALUE); // 初始化全局变量
    }
    
    public void setValue(String value)
    {
        this.value = value;
    }
    
    public String getValue()
    {
        return value;
    }
}
 

注:继承Application类,主要重写里面的onCreate()方法(android.app.Application包的onCreate()才是真正的Android程序的入口点),就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。

2、在ApplicationManifest.xml文件中配置自定义的Application

<application
        android:name="CustomApplication">
</application>
 
实例代码:

CustomApplication.java

/**
 * 继承Application
 * 
 * @author admin
 * 
 */
public class CustomApplication extends Application
{
    private static final String VALUE = "Harvey";
    
    private String value;
    
    @Override
    public void onCreate()
    {
        super.onCreate();
        setValue(VALUE); // 初始化全局变量
    }
    
    public void setValue(String value)
    {
        this.value = value;
    }
    
    public String getValue()
    {
        return value;
    }
}
 
 

FirstActivity.java

public class FirstActivity extends Activity
{
    private CustomApplication app;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        app = (CustomApplication) getApplication(); // 获得CustomApplication对象
        
        Log.i("FirstActivity", "初始值=====" + app.getValue()); // 获取进程中的全局变量值,看是否是初始化值
        
        app.setValue("Harvey Ren"); // 重新设置值
        
        Log.i("FirstActivity", "修改后=====" + app.getValue()); // 再次获取进程中的全局变量值,看是否被修改
        
        Intent intent = new Intent();
        intent.setClass(this, SecondActivity.class);
        startActivity(intent);
    }
}
 
 

注:只需要调用Context getApplicationContext或者ActivitygetApplication方法来获得一个Application对象,然后再得到相应的成员变量即可。它是代表我们的应用程序的类,使用它可以获得当前应用的主题和资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。

SecondActivity.java

public class SecondActivity extends Activity
{
    private CustomApplication app;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        app = (CustomApplication) getApplication(); // 获取应用程序

       Log.i("SecondActivity", "当前值=====" + app.getValue()); // 获取全局值
    }
}
 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.test"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk
        android:minSdkVersion="8" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:name="CustomApplication">
        <!-- 将我们以前一直用的默认Application设置成自定义的CustomApplication -->
        <activity
            android:name=".FirstActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action
                    android:name="android.intent.action.MAIN" />
                <category
                    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".SecondActivity"
            android:label="@string/app_name">
        </activity>
    </application>
</manifest>
  
分享到:
评论

相关推荐

    android 多个application怎么使用

    - **动态加载**:在主`Application`的`onCreate()`方法中,使用反射技术实例化并调用其他`Application`的`attachBaseContext()`和`onCreate()`方法。这种方式需要注意防止内存泄漏。 - **使用Library Project**:...

    application类使用示例

    在Android开发中,`Application`类是每个Android应用程序的基础组件,它是所有Activity、Service以及其他组件的顶级容器。`Application`类是Android系统最先创建的组件,它的生命周期贯穿整个应用程序,因此,它为...

    Android中用Application类实现全局变量

    此外,我们在`onCreate()`方法中初始化了这个变量的值为`true`。 #### 3. 注册Application类 为了让系统知道我们的自定义`Application`类,需要在`AndroidManifest.xml`文件中注册它: ```xml &lt;application ...

    Android Application部分详解

    本文从Android的运行机制入手,重点介绍了Application类的重要性和使用方法。通过本文的学习,读者应该能够更好地理解和运用Application类,从而提升Android应用程序的开发效率和质量。需要注意的是,随着Android...

    使用Application做android完全退出系统实例

    首先,我们要明白`Application`类是Android应用程序的基类,它在应用启动时最先被创建,并在整个应用生命周期内存在。我们可以通过重写`Application`类的方法,添加一些全局的初始化或清理操作。 **1. 创建自定义...

    Android操作Application的代码例子

    在Android开发中,`Application`类是每个应用程序的全局上下文,它在应用程序启动时创建,并且在整个应用程序生命周期内只创建一次。`Application`类提供了一个全局环境,开发者可以在这个环境中进行全局变量的初始...

    Professional Android 2 Application Development

    《Professional Android 2 Application Development》是2010年由Wrox出版社出版的一本关于使用Android SDK 2.0进行专业应用开发的书籍。这本书详细介绍了如何利用Android平台开发高质量、功能丰富的应用程序,适用于...

    Android Application

    - 在 `AndroidManifest.xml` 文件中的 `&lt;application&gt;` 标签内通过 `android:name` 属性指定自定义 Application 类的全限定名。 - 示例: ```xml &lt;application android:name=".MyApplication" ...&gt; &lt;/...

    android application

    总的来说,"android application"涉及的知识点广泛,包括但不限于Activity的生命周期管理、Intent的使用、自定义Application类、AndroidManifest.xml的配置等。深入理解这些概念和机制对于开发高效且用户体验良好的...

    professional android application development

    书里会详细阐述这些方法的适用场景、使用方法及最佳实践。 5. **网络通信**:Android应用常常需要与服务器进行数据交换,涉及HTTP请求、JSON解析、WebSocket等技术。书中会介绍如何使用HttpURLConnection、OkHttp、...

    Android-Application被回收引发空指针异常分析(消灭全局变量

    1. 使用单例模式:创建一个单例类来保存全局变量,这样即使Application被回收,单例中的数据仍然可以保持。单例类应设计为静态内部类,以确保只有在首次使用时才会初始化。 2. 使用SharedPreferences:对于不需要...

    Professional Android 4 Application Development

    - **知识点**:重点讲解如何使用XML布局文件设计美观且功能强大的用户界面,包括常见的控件使用方法及其属性设置。 - **第5章:意图和广播接收器** - **知识点**:探讨Android中的Intent机制,包括显式和隐式...

    android往Application缓存数据的弊端和解决小demo

    以上代码展示了如何在Application中安全地使用SharedPreferences来缓存数据。注意使用`apply()`方法代替`commit()`,以避免阻塞主线程。 总结,虽然Application看似方便地提供了全局缓存的途径,但其潜在问题不容...

    Android Wireless Application Development Volume I: Android Essentials 源代码

    源代码中可能包含了使用Android Studio创建项目的配置文件和结构。 三、Java语言基础 Android应用主要使用Java语言编写,因此对Java的基本语法、面向对象编程、异常处理和集合框架的理解是必要的。源代码中将展示...

    android Application全局传值替代Intent

    `onCreate()`方法用于初始化`instance`,并提供`getInstance()`方法以便在其他组件中获取`Application`实例。 然后,在需要设置全局值的地方,如Activity或Fragment中,可以这样操作: ```java MyApplication....

    Android Application插件例子程序

    在Android开发中,插件化技术是一种...总结,Android Application插件化技术是Android开发中的一个重要领域,它提供了灵活的功能扩展和管理方式。通过理解其工作原理并实践,开发者可以构建出更加高效、易维护的应用。

    没有app的build 导致找不到application.docx

    但是在使用 Android Studio 进行项目开发时,经常会遇到编译失败的问题。本文将对 Android Studio 编译失败的原因进行分析,并提供解决方法。 编译失败原因分析 编译失败的原因可能有很多,例如项目结构不正确、...

    Android插件化开发之OpenAtlas中四大组件与Application功能的验证

    在博客《Android插件化开发之OpenAtlas中四大组件与Application功能的验证》中,作者可能详细介绍了如何使用OpenAtlas进行插件化开发,包括代码示例和遇到的问题及解决方案。通过阅读这个博客,开发者可以更深入地...

Global site tag (gtag.js) - Google Analytics