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或者Activity的getApplication方法来获得一个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>
分享到:
相关推荐
此外,我们在`onCreate()`方法中初始化了这个变量的值为`true`。 #### 3. 注册Application类 为了让系统知道我们的自定义`Application`类,需要在`AndroidManifest.xml`文件中注册它: ```xml <application ...
- **动态加载**:在主`Application`的`onCreate()`方法中,使用反射技术实例化并调用其他`Application`的`attachBaseContext()`和`onCreate()`方法。这种方式需要注意防止内存泄漏。 - **使用Library Project**:...
在Android开发中,`Application`类是每个Android应用程序的基础组件,它是所有Activity、Service以及其他组件的顶级容器。`Application`类是Android系统最先创建的组件,它的生命周期贯穿整个应用程序,因此,它为...
本文从Android的运行机制入手,重点介绍了Application类的重要性和使用方法。通过本文的学习,读者应该能够更好地理解和运用Application类,从而提升Android应用程序的开发效率和质量。需要注意的是,随着Android...
首先,我们要明白`Application`类是Android应用程序的基类,它在应用启动时最先被创建,并在整个应用生命周期内存在。我们可以通过重写`Application`类的方法,添加一些全局的初始化或清理操作。 **1. 创建自定义...
在Android开发中,`Application`类是每个应用程序的全局上下文,它在应用程序启动时创建,并且在整个应用程序生命周期内只创建一次。`Application`类提供了一个全局环境,开发者可以在这个环境中进行全局变量的初始...
《Professional Android 2 Application Development》是2010年由Wrox出版社出版的一本关于使用Android SDK 2.0进行专业应用开发的书籍。这本书详细介绍了如何利用Android平台开发高质量、功能丰富的应用程序,适用于...
- 在 `AndroidManifest.xml` 文件中的 `<application>` 标签内通过 `android:name` 属性指定自定义 Application 类的全限定名。 - 示例: ```xml <application android:name=".MyApplication" ...> </...
总的来说,"android application"涉及的知识点广泛,包括但不限于Activity的生命周期管理、Intent的使用、自定义Application类、AndroidManifest.xml的配置等。深入理解这些概念和机制对于开发高效且用户体验良好的...
书里会详细阐述这些方法的适用场景、使用方法及最佳实践。 5. **网络通信**:Android应用常常需要与服务器进行数据交换,涉及HTTP请求、JSON解析、WebSocket等技术。书中会介绍如何使用HttpURLConnection、OkHttp、...
- **知识点**:重点讲解如何使用XML布局文件设计美观且功能强大的用户界面,包括常见的控件使用方法及其属性设置。 - **第5章:意图和广播接收器** - **知识点**:探讨Android中的Intent机制,包括显式和隐式...
1. 使用单例模式:创建一个单例类来保存全局变量,这样即使Application被回收,单例中的数据仍然可以保持。单例类应设计为静态内部类,以确保只有在首次使用时才会初始化。 2. 使用SharedPreferences:对于不需要...
以上代码展示了如何在Application中安全地使用SharedPreferences来缓存数据。注意使用`apply()`方法代替`commit()`,以避免阻塞主线程。 总结,虽然Application看似方便地提供了全局缓存的途径,但其潜在问题不容...
源代码中可能包含了使用Android Studio创建项目的配置文件和结构。 三、Java语言基础 Android应用主要使用Java语言编写,因此对Java的基本语法、面向对象编程、异常处理和集合框架的理解是必要的。源代码中将展示...
`onCreate()`方法用于初始化`instance`,并提供`getInstance()`方法以便在其他组件中获取`Application`实例。 然后,在需要设置全局值的地方,如Activity或Fragment中,可以这样操作: ```java MyApplication....
在Android开发中,插件化技术是一种...总结,Android Application插件化技术是Android开发中的一个重要领域,它提供了灵活的功能扩展和管理方式。通过理解其工作原理并实践,开发者可以构建出更加高效、易维护的应用。
但是在使用 Android Studio 进行项目开发时,经常会遇到编译失败的问题。本文将对 Android Studio 编译失败的原因进行分析,并提供解决方法。 编译失败原因分析 编译失败的原因可能有很多,例如项目结构不正确、...