进程-prosess

  • 什么是进程?
    进程是一个具体的应用程序,线程是进程中的一个分支,为单独完成程序中的某一项或一组功能而存在。应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程(线程是进程中的实体,一个线程必须有一个父进程).简单点就是资源分配的调用基本单位-车间
  • 进程如何创建呢
    只需要在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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Jianwei's blog 首页 分类 关于 归档 标签 巧用Android多进程,微信,微博等主流App都在用...
    justCode_阅读 5,955评论 1 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,951评论 25 708
  • 转自 1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity setCon...
    joe1632阅读 1,413评论 0 7
  • 因离钱塘江近,闲暇时,总喜欢过去溜达一下。 一方面那里有最美跑道,红蓝结合的塑胶跑道,笔直延伸,两旁的樱花树增加了...
    补拙莫如勤LV阅读 453评论 2 5
  • “我累了,夫人。应该说,是这位姑娘,你我到底还要假扮布衣夫妻到几时啊?”他颇为无奈的瞧了身旁貌美的少女一眼。 “哎...
    Jevoudraistevoi阅读 329评论 0 0