Android 学习系列 - Application

智数映溟者
• 阅读 2571

Android Application

关于

安卓运行的时候会为每一个应用创建一个Application 类的对象,单例,每一个Application在一个单独的进程中运行。app 会存储系统相关的信息。

通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册

app 里边的所有activity都会在这个进程上上运行。 app 里边定义的全局变量共享给所有activity。

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

sample

 <!-- 默认Application设置成自定义的CustomApplication -->
 <application
        android:name="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>
 </application>
 public class MyApplication extends Application {

    private static MyApplication singleton;
    private String val;
    
    // 单例模式
    public static MyApplication getInstance() {
        return singleton;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    
        singleton = this;

        // 直到所有的activity都被kill,Application才会被销毁
        // 所以这里的变量会直到最后才会被销毁
        setValue('global varaibale');
    }
    
    public void setValue(String val) {
        this.val = val;
    }
 }
 public class MyActivity entends Activity {
    private MyApplication app;

    @Override 
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.main);
        
        // activity 中获取app 对象
        app = (MyApplication) getApplication();
    }
 }

app 的进程状态

android控制内存管理和进程的管理,app 任何时候都可能被kill掉,kill 的优先级由app的组件的优先级以及app间相互依赖的关系决定。

优先级决定等级树

  1. Active Process (Critical Priority)

    • 用户在操作的component 属于这个process

    • 为了保证 active process 能够正常运行,系统会通过kill 其他应用来腾出资源

    • 具体包含如下组件

      1. 正在交互的activity

      2. 正在执行 onReceive 的BroadCaset Receiver

      3. 正在执行 onStart, onCreate, onDestroy 的Service

      4. 标记为在前台运行的service ?

  2. Visible Process (High Priority)

    • 通常为可见但是没交互的activity

  3. Started Service Process (High Priority)

  4. Background Process (Low Priority)

  5. Empty Process (Low Priority)

app 处理onCreate 以外的其他状态函数

  1. onLowMemory

    • 当后台进程被kill,当前仍然缺乏资源的情况会被调用

  2. onTrimMemory

  3. onConfigurationChanged

    • 如果应用依赖系统设置,设置改变过后可以通过这个函数监听

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
springcloud eureka.instance
1.在springcloud中服务的 InstanceID默认值是:${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance\_id:${server.port}},也就是:主机名:应用名:应用端口。如图1
Easter79 Easter79
3年前
springboot配置文件、属性,优先级顺序
从application.properties说起1.为什么默认是application.properties?//ConfigFileApplicationListener.javaprivateSet<StringgetSearchNames(){//CONFIG_NAME_
简
4年前
Android四大组件与进程启动的关系
一.概述Android系统将进程做得很友好的封装,对于上层app开发者来说进程几乎是透明的.了解Android的朋友,一定知道Android四大组件,但对于进程可能会相对较陌生.一个进程里面可以跑多个app,一个app也可以跑在多个进程里,通过配置Android:process属性来决定所运行在哪个进程。再进一步进程是如何创建的,可能很多人不知道f
kenx kenx
3年前
SpringBoot 属性配置文件数据注入配置和yml与properties区别
前言我们知道SpringBoot通过配置类来解放一堆的xml文件配置,通属性配置文件,来进行,系统全局属性配置,这样极大的简化了我们开发过程,javaweb也可以甜甜的从此快速配置SpringBoot默认加载支持application.properties、application.yaml和application.yml三种拓展名结尾的全局属性配
Stella981 Stella981
3年前
PostgreSQL死锁进程及慢查询处理
1、死锁进程查看:SELECTFROMpg_stat_activityWHEREdatname'数据库名称'andwaitingtrue;pid进程id。2、慢查询SQL:selectdatname,pid,usename,application_name,client_addr,client
Wesley13 Wesley13
3年前
Android中获得上下文的静态方法
//在Android的清单文件做如下申明:<applicationandroid:name"com.xyz.MyApplication"</application//然后写这个类:publicclassMyApplicationextendsApplication{
Stella981 Stella981
3年前
Android !No Launcher activity found!错误
今天新建了个android工程跑程序时显示NoLauncheractivityfound错误,模拟器也不运行。上网一查,发现问题出在整个项目的那个主配置xml中,一般名字都是叫AndroidManifest.xml里面没有配置启动项(原因多种多样),在<application</application中少了这段代码<a
Easter79 Easter79
3年前
SpringCloud学习笔记(七)之SpringCloud Config分布式配置中心
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自带一个application.yml。上百个配置管理。是什么
Stella981 Stella981
3年前
Android Volley运用
使用Android studio在build.gradle添加以下信息就可以获取支持库,当然了,如果你没有下载到该支持库会提示你下载。compile 'com.mcxiaoke.volley:library:1.0.19'在一个Application中创建一个请求队列,调用通过((Myapp) getAppl
Stella981 Stella981
3年前
SpringBoot核心
1.基本配置1.1入口类和@SrpingBootApplicationSpringBoot通常有一个名为\Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法。在main方法中使用SpringApplicatio
Easter79 Easter79
3年前
SpringBoot核心
1.基本配置1.1入口类和@SrpingBootApplicationSpringBoot通常有一个名为\Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的java应用的入口方法。在main方法中使用SpringApplicatio