美文网首页
进程-prosess

进程-prosess

作者: 好大一只鹏 | 来源:发表于2016-09-10 22:39 被阅读0次
    • 什么是进程?
      进程是一个具体的应用程序,线程是进程中的一个分支,为单独完成程序中的某一项或一组功能而存在。应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程(线程是进程中的实体,一个线程必须有一个父进程).简单点就是资源分配的调用基本单位-车间
    • 进程如何创建呢
      只需要在Manifest需要的Activity,Service中写上android:process="*#$%^".
    • 进程的等级
      1.Foreground Process: 前端的进程状态: 正处于Activity Resume()状态 正处于与bound服务交互状态 正处于服务在前台运行的状态,(startForeground()被调用,例如:播放音乐) Service生命周期函数正在被执行(onCreate(),onStart(),onDestory()) BroadcastReceiver正在执行onReceive()方法 杀死Foreground Process需要用户响应-因为这个安全优先级最高
      2.Visible Process 显示进程:Activity不再前端显示.但是也没有完全隐藏,能够看得见,比如弹出一个对话框。(Input Methed)
      3.Service Process 在运行的非Foreground,Visible的进程。
      4.Background Process 不可见状态哦Activity进程(onStop()被调用)
      5.Empty Procecc 没有运行任何Compuments的进程,保留这个进程主要是为了缓存的需要。android五个进程等级
    • 进程和线程的区别
      进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
      1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
    1. 线程的划分尺度小于进程,使得多线程程序的并发性高。
    2. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
    3. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
    4. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
      4.优缺点线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
    QQ图片20160910223012.png

    (此图来源于百度)

    • Messenger实现进程中的通信
      service中
    class IncomingHandler extends Handler {    
        @Override    
        public void handleMessage(Message msg) {   
             super.handleMessage(msg);   
             switch (msg.what) {     
               case 0:        
               "           代码                       "    
                   break;             
       case 1:     
                   "       代码                      "
                      break;      
          }  
          }  
      }    
    @Nullable 
       @Override  
      public IBinder onBind(Intent intent) {  
          return mMessenger.getBinder();  
      }}
    

    MainActivity中

    private ServiceConnection mServiceConnection = new ServiceConnection() {  
      @Override    
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {   
         messenger = new Messenger(iBinder); 
       }    
    @Override 
       public void onServiceDisconnected(ComponentName 
    componentName) {   
     }};
    bindService(new Intent(MainActivity.this, Music_service.class), mServiceConnection, Context.BIND_AUTO_CREATE);
    if (messenger != null) { 
       Message message = Message.obtain(null, what);   
     try {       
     messenger.send(message);  
      } catch (RemoteException e) {   
         e.printStackTrace(); 
       }}
    
    • Notification
      听完课后老师讲的那个Notification.setLatestEventInfo是过去用的,现在已经不能用啦,这里我自己搜索了一个
    Notification.Builder builder = new Notification.Builder(this);//新建Notification.Builder对象
    PendingIntent intent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);
    //PendingIntent点击通知后所跳转的页面builder.setContentTitle("有新的通知");
    builder.setContentText("点击查看");
    builder.setSmallIcon(R.drawable.background);
    builder.setContentIntent(intent);//执行intentbuilder.setAutoCancel(true);//  打开后图标消失Notification notification = builder.getNotification();//将builder对象转换为普通的notificationstartForeground(1,notification);         //运行notification
    

    相关文章

      网友评论

          本文标题:进程-prosess

          本文链接:https://www.haomeiwen.com/subject/mzzyettx.html