<i id='mak43dzv'><tr id='tw77e80w'><dt id='lizyvp10'><q id='8dh3wjug'><span id='ivlmms28'><b id='j8b6i1xr'><form id='3oyoe84e'><ins id='tm4c799h'></ins><ul id='am9srj8e'></ul><sub id='pby6igi8'></sub></form><legend id='qw9n7y0r'></legend><bdo id='66tgwnft'><pre id='kugd8cix'><center id='v3ndeuxr'></center></pre></bdo></b><th id='01g83z5g'></th></span></q></dt></tr></i><div id='jycaijyc'><tfoot id='nip0knbb'></tfoot><dl id='o7cejy3h'><fieldset id='n5h79zyr'></fieldset></dl></div>
        <legend id='khidx8ff'><style id='cin2zmn7'><dir id='8ye6lb49'><q id='lo0gtghs'></q></dir></style></legend>
      • <small id='z4so399n'></small><noframes id='43825x4f'>

          <tbody id='5hcs1nez'></tbody>
        <tfoot id='9ll8k8dm'></tfoot>
      • 网站建设公司当前位置 : 网站建设公司 > 知识普及

        Android应用开发基本知识点汇总

        发布时间:2021-12-07 15:51   浏览次数:次   

        Activity

        一 生命周期
        4种状态  running / paused / stopped / killed
        生命周期   
        Activity启动  onCreate -> onStart -> onResume
        点Home返回主界面  onPause -> onStop
        再次回到原Activity   onRestart -> onStart -> onResume
        退出Activity   onPause -> onStop -> onDestroy
        进程优先级     前台/可见/服务/后台/空

        二 任务栈

        三 启动模式
        standard
        singleTop  栈顶复用
        singleTask 栈内复用
        singeInstance 

        四 scheme跳转协议
        服务器可以定制化告诉App跳转哪个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面

        Fragment

        一 第五大组件
        为什么是第五大组件  Fragment相对Activity更节省内存,切换更舒适
        Fragment加载到Activity的两种方式
        静态加载 xml
        动态加载 fragmentTransaction.add(id, fragment, “name”);  .commit;
        FragmentPagerAdapter与FragmentStatePagerAdapter
        FragmentStatePagerAdapter在切换时回收内存,适合页面较多的情况
        FragmentPagerAdapter并没有回收内存,只是detach了Activity

        二 生命周期
        onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onStart -> onResume
        -> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach 
        先创建Activity后创建Fragment,先销毁Fragment后销毁Activity

        三 Fragment之间的通信
        Fragment调用Activity     getActivity
        Activity调用Fragment     接口回调
        Fragment调用Fragment方法       findFragmentById

        四 FragmentManager
        replace
        add
        remove

        Service

        一 应用场景,与Thread区别

        Service是什么      后台长时间运行,没有用户界面,运行在主线程,不能有耗时操作
        Service与Thread区别        Activity难以与Thread交互,尤其当Activity销毁以后

        二 开启Service的两种方式

        StartService
                    onCreate -> onStartCommand -> onBind -> onDestroy
                    onStartCommand  return START_STICKY;
                    startService(intent);  stopService(intent);
        BindService

        Broadcast

        一 广播
        定义
        场景    可在同一个App多个进程间消息传递,可在不同App间消息传递
        种类    Normal, System有序广播, Local本地广播

        二 实现方式
        静态注册   注册完一直运行
        动态注册   跟随Activity生命周期

        三 实现机制

        四 本地广播 LocalBroadcastManager
              由于之前的广播都是全局的,所有应用程序都可以接收到,这样就很容易会引起安全性的问题,比如说我们发送一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。
          为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自应用程序发出的广播,这样所有的安全性问题就都不存在了。

        异步消息处理

        Handler

        子线程发送消息,让主线程更新UI
        handler使用方法 post(runnable)与sendMessage(message)
        handler内存泄漏解决办法:1. handler改为静态内部类  2.handler内部持有Activity外部弱引用 
        3. mHandler.removeCallback() 

        HandlerThread

        多次创建销毁线程很耗费系统资源
        本质上是线程, 继承自Thread,同时自己内部拥有Looper对象,可以进行Looper循环
        串行队列,不能同时多任务处理,需要等待
        handlerThread = handler + thread + looper

        AsyncTask

        本质上封装了线程池和Handler
        传入三个参数 xxxAsyncTask extends AsyncTask<Integer, Integer, String> 使用参数,进度参数,结果参数
        onPreExecute  在UI线程里执行
        doInBackground  返回参数传给onPostExecute,中间publishProgress(i)中的参数传给onProgressUpdate
        onProgressUpdate   在UI线程里执行
        onPostExecute   在UI线程里执行
        xxxAsyncTask.cancel()
        并行or串行?为了线程池稳定,系统默认串行,一般建议串行,用xxxAsyncTask.executeOnExecutor执行并行

        IntentService

        IntentService是串行的
        onHandleIntent 执行耗时操作
        IntentService内部封装了HandlerThread框架,利用HandlerThread进行异步消息传递


        WebView

        API16之前,没有限制WebView.addJavascriptInterface(),攻击者利用反射可执行任意Java对象的方法。
        onDestroy销毁WebView时,先要从父视图里remove WebView, 再调用WebView.removeAllViews()和WebView.destroy(),避免内存泄漏,WebView中的Context使用弱引用。
        jsbridge 通过JS构建起的桥
        WebView硬件加速导致页面渲染问题

        Binder

        Linux的进程间通信有Pipe, Socket,共享内存,信号量,信号,报文。
        但是出于性能和安全考虑,Android引入了Binder机制。
        Binder驱动位于内核空间,两个位于用户空间的进程间的通信,必须使用到Linux系统调用。
        Binder对象是一个跨进程通信的对象,由Binder驱动实现。

        进程通过Binder驱动向Service Manager注册,Service Manager维护一张表。
        进程A从Service Manager里查询进程B,Service Manager返回一个代理对象,
        代理对象通过Binder驱动实现,将结果返回给Service Manager。


        Android构建

        将资源文件通过aapt编译生成R.java,将aidl文件通过aidl编译生成Java接口
        将App源码 + R.java + aidl的Java接口,通过Java编译器生成.class字节码文件
        将.class通过dex生成.dex文件(虚拟机Dalvik可执行文件)
        将.dex + 其它未编译文件通过apkbuilder生成apk
        将apk通过签名工具jarsigner进行签名
        将apk通过zipalign进行对齐操作,节省内存开销,减少apk大小


        OKHttp

        使用方法
        创建一个OKHttpClient对象
        创建一个Request对象(通过内部类Builder调用生成)
        创建一个Call对象,调用execute(同步请求) / enqueue(异步请求)

        WebSocket心跳原理
        心跳包中可能会携带数据
        当收到Ping帧的时候需要立即返回一个Pong帧
        在连接建立之后,随时都可以发送Ping帧
        心跳是用来测试链接是否存在和对方是否在线
        在响应Ping帧的的Pong帧中,必须携和被响应的Ping帧中相同的数据


        其他要点

        App架构设计
        MVC / MVP / MVVP 各自优缺点与应用
        框架选型,包括网络框架,图片框架,总线框架等
        第三方库选型,包括推送,定位,统计,图表等
        compiledSDK / minimunSDK / targetSDK 尤其是targetSDK
        屏幕适配的各种方案,包括dp/sp,图片, 静态布局注意点,动态布局等
        网络安全技术,包括数据存储,数据加密(哈希,对称,非对称),HTTPS

        <legend id='21d1ud4s'><style id='5f4wt6s0'><dir id='xdov2qo1'><q id='b73mgi6h'></q></dir></style></legend>

            <tfoot id='ds453k2t'></tfoot>

                <tbody id='dswhdlyn'></tbody>
            • <i id='ooy3p0qs'><tr id='vd7f0n8r'><dt id='v7g62bkr'><q id='jel4c51c'><span id='i9lrfqv4'><b id='w0yelr7w'><form id='9sv37jy6'><ins id='qa1rptnw'></ins><ul id='96pwx80u'></ul><sub id='3fi46efn'></sub></form><legend id='1m3srl8v'></legend><bdo id='rf4nzwdu'><pre id='rj1oxnof'><center id='atu2fi1e'></center></pre></bdo></b><th id='4zxjr39r'></th></span></q></dt></tr></i><div id='dv5pbews'><tfoot id='g30x6d9i'></tfoot><dl id='ybx1wdkc'><fieldset id='nqrqs5vd'></fieldset></dl></div>

              <small id='eybxhgyu'></small><noframes id='qd4i7a7z'>

              本文来源于网络,若有侵权请联系3449817223#qq.com,将在第一时间删除。

                  <tbody id='rv8gtjpy'></tbody>
                <legend id='1614z0gq'><style id='a0l0bro1'><dir id='rmdhe9t0'><q id='vzlea02y'></q></dir></style></legend>
              1. <tfoot id='3myh7tde'></tfoot>
              2. <small id='72pxnqia'></small><noframes id='dchoenqv'>

                  <i id='31fdl67m'><tr id='1re6m13x'><dt id='e27dqjjj'><q id='o1b7catp'><span id='uktel1oe'><b id='nsydla07'><form id='32bik5ri'><ins id='5t7479iq'></ins><ul id='vz2qeubt'></ul><sub id='wnuyj78x'></sub></form><legend id='qe8xprcz'></legend><bdo id='bt836y02'><pre id='n8ywrx45'><center id='s8zvzjwm'></center></pre></bdo></b><th id='ki3zdqkm'></th></span></q></dt></tr></i><div id='sueuv67m'><tfoot id='79e8jsdl'></tfoot><dl id='7ubh6xyj'><fieldset id='9tpswd9y'></fieldset></dl></div>