Android:进程(process)优先级、startForeground

简介:

进程(process)的优先级(从高到低):

1. 前台进程 Foreground process

  1) 当前用户操作的Activity所在进程

  2) 绑定了当前用户操作的Activity的Service所在进程  

  3) 调用了startForeground()的Service

     典型场景:后台播放音乐


<1>提高Service优先级的方法:

在Service中调用startFroeground(int id, Notification notify)      


<2>恢复Service优先级的方法:

在Service中调用stopFroeground(boolean removeNotify)


2. 可见进程Visible process

  1) 处于暂停状态的Activity

  2) 绑定到暂停状态的Activity的Service


3. 服务进程Service process  

  通过startService()启动的Service


4. 后台进程Background process  

  1) 处于停止状态的Activity


5. 空进程Empty process  



Activity端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public  class  MainActivity  extends  Activity  implements  OnClickListener
{
          
     private  TextView textView;
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         findViewById(R.id.button_startservice).setOnClickListener( this );
         findViewById(R.id.button_stopservice).setOnClickListener( this );
         findViewById(R.id.button_stopforeground).setOnClickListener( this );
         textView =(TextView) findViewById(R.id.textView1);
     }
          
     @Override
     public  boolean  onCreateOptionsMenu(Menu menu)
     {
         getMenuInflater().inflate(R.menu.main, menu);
         return  true ;
     }
     @Override
     public  void  onClick(View v)
     {
         switch  (v.getId())
         {
             case  R.id.button_startservice:
                 StartService();
                 break ;
             case  R.id.button_stopservice:
                 StopService();
                 break ;
             case  R.id.button_stopforeground:
                 StopForeground();
                 break ;
                  
             default :
                 break ;
         }
     }
     private  void  StopForeground() //恢复优先级,但不停止服务。oncreate只执行一次,但onstart每点一次就会执行一次
     {
         Intent intent =  new  Intent( this , MyService. class );
         intent.putExtra( "isStop" true );
         startService(intent );
     }
     private  void  StopService() //停止服务
     {
         Intent intent =  new  Intent( this , MyService. class );
         stopService(intent );
     }
     private  void  StartService() //启动服务,发出通知,设为前台优先级
     {
         Intent service =  new  Intent( this , MyService. class );
         startService(service );
     }
          
}




Service端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public  class  MyService  extends  Service
{
     @Override
     public  void  onCreate()
     {
         super .onCreate();
         Notification notification =  new  Notification(R.drawable.ic_launcher, "启动服务发出通知" , System.currentTimeMillis());
         //设置内容和点击事件
         Intent intent =  new  Intent( this , MainActivity. class );
         PendingIntent contentIntent = PendingIntent.getActivity( this 0 ,intent ,  0 );
         notification.setLatestEventInfo( this "优先级通知" "提高优先级" , contentIntent);
         notification.flags =Notification.FLAG_AUTO_CANCEL;  //设置为点击后自动取消
            
//        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//        manager.notify(1235, notification);
         startForeground( 1235 , notification); //该方法已创建通知管理器,设置为前台优先级后,点击通知不再自动取消
     }
        
        
     @Override
     public  int  onStartCommand(Intent intent,  int  flags,  int  startId)
     {
         if (intent.getBooleanExtra( "isStop" false )) //在onStart中降低优先级而不关闭服务
         {
             Log.e( "Myservice" "huifu()" );
             huifu();
         }
         return  super .onStartCommand(intent, flags, startId);
     }
        
        
     private  void  huifu() //恢复优先级
     {
         stopForeground( true );
     }
        
     @Override
     public  void  onDestroy()
     {
         Log.e( "Myservice" "onDestroy()" );
         super .onDestroy();
     }
        
     @Override
     public  IBinder onBind(Intent intent)
     {
         throw  new  UnsupportedOperationException( "Not yet implemented" );
     }
}




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1205265,如需转载请自行联系原作者
目录
相关文章
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
算法 调度 UED
揭秘操作系统背后的暗战:进程调度与优先级反转的惊心动魄!
【8月更文挑战第21天】操作系统核心管理计算机资源,进程调度为其关键功能,决定CPU使用权,影响系统性能与用户体验。优先级反转是多任务环境下常见挑战:高优先级进程因等待低优先级进程占用的资源而被阻塞,导致系统效率下降。通过优先级继承或提升机制可解决此问题,确保系统资源高效利用与响应时间优化。
182 1
|
算法 调度
深入理解操作系统:进程调度与优先级反转问题
【9月更文挑战第36天】操作系统是计算机科学中的核心概念,它管理着计算机的硬件资源和软件进程。在多任务处理环境中,进程调度是保证系统高效运行的关键机制之一。本文将探讨进程调度的基本概念、调度算法以及它们如何影响系统性能。同时,我们还将讨论优先级反转问题,这是一个在实时系统中常见的问题,它可能导致系统响应时间不可预测。通过分析优先级反转的原因和解决方案,我们可以更好地理解操作系统的设计和优化策略。
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
算法 人机交互 调度
进程调度算法_轮转调度算法_优先级调度算法_多级反馈队列调度算法
轮转调度算法(RR)是一种常用且简单的调度方法,通过给每个进程分配一小段CPU运行时间来轮流执行。进程切换发生在当前进程完成或时间片用尽时。优先级调度算法则根据进程的紧迫性赋予不同优先级,高优先级进程优先执行,并分为抢占式和非抢占式。多队列调度算法通过设置多个具有不同优先级的就绪队列,采用多级反馈队列优先调度机制,以满足不同类型用户的需求,从而优化整体调度性能。
774 15
|
算法 调度
深入理解操作系统:进程调度与优先级反转
【9月更文挑战第21天】在操作系统的心脏跳动着的,是进程调度器。它决定了哪个进程运行,何时运行,以及如何优雅地共享CPU资源。本文将通过浅显易懂的语言和直观的代码示例,探索进程调度的奥秘,揭示优先级反转问题及其解决方案,带领读者领略操作系统中这一精妙绝伦的设计。
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
902 4
|
算法 调度 UED
探索操作系统核心:进程调度与优先级队列
【8月更文挑战第31天】在计算机的心脏——操作系统中,进程调度是维持系统运行的关键机制。本文将深入浅出地介绍进程调度的概念,并通过一个简单的优先级队列算法示例,展示如何在操作系统设计中实现基本的进程管理。我们将从理论到实践,逐步揭示如何通过代码构建一个模拟的进程调度系统,帮助读者理解这一复杂但至关重要的操作系统特性。
|
API Android开发
Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。
282 1
|
运维 算法 调度
深入理解操作系统:进程调度与优先级自动化运维:使用Ansible实现服务器集群管理
【8月更文挑战第27天】在操作系统的众多奥秘中,进程调度无疑是一个既简单又复杂的主题。它就像是交响乐团中的指挥,协调着每一个音符,确保乐曲和谐而有序地进行。本文将带领读者走进进程调度的世界,探索其背后的原理和实现,同时通过代码示例揭示其精妙之处。让我们一起揭开进程调度的神秘面纱,理解它在操作系统中的重要性。

热门文章

最新文章