Android进程概念与应用

进程

应用场景

​ 类似音乐类、跑步健身类、手机管家类等长时间需要在后台运行的应用Android中的进程

Android中的进程

前台 > 可见 > 服务 > 后台 > 空

Foreground process 前台进程(满足任一个条件)

1、拥有一个正在和用户交互的Activity(也就是说Activity 的onResume()方法被执行了)
2、拥有一个被用户的正在交互的Activity 绑定的Service
3、拥有一个以“前台模式”运行的Service–该Service 已经被调用了startForeground()方法
4、拥有一个正在执行生命周期方法的Service(onCreate()、onStart()、onDestory())
5、拥有一个BroadCastReceiver 并且正在执行onReceive()方法

Visible process 可视进程(满足任一条件)

​ 可以看见,但不可以交互,*一个不拥有任何前台组件的进程,但是依然可以影响用户在屏幕上看见的控件。

1、拥有一个不是前台的Activity(onPause 方法被调用),但是对用户依然可见。这种情况(处于暂停状态的Activity)发生,比如,如果前台Activity 打开了一个dialog,该dialog 下面依然可见Activity。
2、拥有一个被可见或者前台Activity 绑定的Service

Service process 服务进程

后台进程

Activity完全处于后台所在的进程

Empty process 空进程

当程序退出时, 进程没有被销毁, 而是变成了空进程

跨进程访问四大组件

方法一:将被访问的组件封装成Component,然后通过Intent启动。通常应用于访问非系统应用的组件

被访问组件的exported属性设置为true

Intent intent = new Intent();
ComponentName componentName = new ComponentName("目标组件包名","目标组件名");
intent.setComponent(componentName);
startActivity(intent);
//ComponentName为一个特定的应用程序组件,Android四大组件均可用

方法二:指定目标组件中的Intent-filte中内容,如action,data等。常用语方位系统应用组件

//访问者
Intent intent = new Intent();  
intent.setAction("com.demo.process.MYACTION");   //指定目标组件action
intent.setData(Uri.parse("message:"));  		//指定目标组件的data
intent.putExtra("key", "value");  				//向目标组件传递信息
startActivity(intent); 
//被访问组件
<activity android:name="com.demo.process.ShareActivity">  
    <intent-filter>  
        <action android:name="com.demo.interprocess.MYACTION"/>  
        <data android:scheme="message"/>  
        <category android:name="android.intent.category.DEFAULT"/>  
    </intent-filter>  
</activity>  

进程保活

利用系统广播拉活
利用系统服务机制拉活。onStartCommand方法,返回START_STICKY
利用native进程拉活(5.0之后失效)
利用JobScheduler机制拉活
利用帐号同步机制拉活

杀死进程

通过PID

​ 不能杀死其他进程

int pid = android.os.Process.myPid(); 	//获得自己的pid
android.os.Process.killProcess(pid);	//通过pid自杀

退出JAVA虚拟机

System.exit(0); 

通过包名,杀死其他进程

//添加权限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
//通过包名,杀死指定进程
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);	//获得获得管理器
am.killBackgroundProcesses(packageName);	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值