Android-四大组件的工作过程

  1. 用户参与
    用户最常见的两种操作, 按Home键或Back键.
    (1) 点击Home键, 暂停当前Activity, 调用onPause –> onSaveInstanceState –> onStop; 再次返回, 恢复当前页面, 调用onRestart -> onStart -> onResume.
    (2) 点击Back键, 关闭当前Activity, 调用onPause -> onStop -> onDestroy; 再次启动则为重建, 从onCreate开始调用.
    onStart()是Activity可见, 无法交互; onResume()是Activity可见, 可以交互. onPause是Activity无法交互, 必须执行前一个Activity的onPause完成, 后一个Activity才能启动, 在onPause中, 不能执行复杂的操作, 否则会影响下一个Activity启动速度. onStop是Activity关闭显示.
    (3)屏幕旋转
    如果你不做任何配置
    启动Activity会执行如下方法:
    onCreate –> onStart –> onResume之后旋转屏幕,则Activity会被销毁并重新创建,之后便会执行如下方法:onPause –> onSaveInstanceState –> onStop –> onDestroy –> onCreate –> onStart –> onRestoreInstanceState –> onResume

在系统调用onCreate()之后,就会调用onStart(),然后继续调用onResume以进入Resumed状态,最后就会停在Resumed状态,完成启动。系统会调用onDestrory()来结束一个Activity的声明周期让它回到Killed形态。
onCreate():创建基本的UI元素。
onPause()与onStop():清除Activity的资源,避免浪费。
onDestory():因为引用会在Activity销毁的时候销毁,而线程不会,所以清除开启的线程。
Activity启动模式

  • standard(标准模式)
  • singleTop(栈顶复用模式)
  • singleTask(站内复用模式)
  • singleInstance(单实例复用模式)

standard

默认的启动模式,如果不指定Activity的启动模式,则使用这种方式启动Activity。这种启动模式每次都会创建新的实例,每次点击standard模式创建Activity后,都会创建新的Activity覆盖在原Activity上。

singleTop

系统会判断当前栈顶Activity是不是要启动的Activity,如果是则不创建新的Activity而直接引用这个Acitivty。

singleTask

singleTask是检查整个Activity栈中是否存在当前需要启动的Activity。如果存在,则将在Activity主语栈顶,并将该Activity以上的Acitivity以上的Activity都销毁。不过这里是指在同一个app中启动这个singleTask的Activity,如果是其他程序singleTask模式来启动这个,那么它将创建一个新的任务栈。

singleInstance

singleInstance这种启动模式和使用的浏览器工作原理类似,比如多个程序访问浏览器,如果没有打开,则会打开浏览器。申明为singleInstance也一样,举个例子,如果应用A的任务栈中创建了MainActivity实例,且启动模式为singleInstance,如果B也要激活MainActivity,则不需要创建。

Intent Flag模式

  • Intent.FLAG_Activity_NEW_TASK
  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG.ACTIVITY_NO_HISTORY

创建、配置Service

public class FirstService extends Service{
       //必须实现的方法
      @Override
       public IBinder onBind(Intent arg0){
              return null
        }
        //Service被创建时回调该方法
        @Override
        public void onCreated(){
                super.onCreate();
        }
        //Service被启动时回调该方法
        @Override
        public int onStartCommand(Intent intent,int flags,int startId){
              return   START_STICKY;
           }
        //Service被关闭之前回调该方法
        @Override
        public void onDestory(){
                super.onDestory();
        }
}

在AndroidManifest配置Service

<serivce name=".FirstService" />

当Service开发完成之后,接下来就要在程序中运行Service了,通过Context的startService方法,通过该方法启动Service,访问者与Service之间没有关联。

如果Service和访问者之间需要进行调用或交换数据,则应该使bingService()和unbingService()方法启动、关闭Service。

public class BindService extends Service{
      private int count;
      private boolean quit;
      //定义onBinder方法锁返回的对象
      private MyBinder binder=new MyBinder();
      //通过继承Binder来实现IBinder类
      public class MyBinder extends Binder{
            public int getCount(){
                  //获取Service的运行状态
                  return count; 
            } 
      }
      //必须实现的方法,绑定该Service时回调该方法
      @Override
      public IBinder onBind(Intent intent){
              //返回IBinder对象
              return binder;
      }
      @Override
      public void onCreate(){
            super.onCreate();  
             new Thread(){
                    @Override
                     public void run(){
                           while(!quit){
                                    try{
                                           Thread.sleep(1000);
                                     }
                                      catch(InterruptedException){
                                                  
                                        }
                                         count++;
                            }
                      }
              }.start();
      }
      //Service被断开连接时回调改方法
      @Override
      public boolean onUnbind(Intent intent){
              return true;
      } 
      //Service被关闭之前回调该方法
       @Override
       public void onDestory(){
              super.onDestory();
              this.quit=true;
        }
}

pirvate ServiceConnection conn=new ServiceConnection(){
        @Override
        public void onSeriviceConnected(ComponentName name,IBinder serivce){
              //获取Serivce的onBind方法锁返回的MyBinder对象
              binder=(BinderService.MyBinder)serivce;
        }
        //当该Activity与Service断开连接时回调改方法
        @Override
        public void onSerivceDisconnected(ComponentName name){
                
        }
}

ContentProvider

ContentProvider相当于一个“网站”,它的作用是暴露可供操作的数据;其它应用程序则通过ContentResolver来操作ContentProvider所暴露的数据,ContentResolver相当于HttpClient.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容