日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...

發(fā)布時間:2023/12/10 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

碼仔,今天就給大家?guī)砹?strong>《每日一道面試題》的第九期:

01

理解Activity View window的關(guān)系?

Activity像一個工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖)LayoutInflater像剪刀,Xml配置像窗花圖紙。?

  • Activity構(gòu)造的時候會初始化一個Window,準確的說是PhoneWindow。?

  • 這個PhoneWindow有一個“ViewRoot”,這個“ViewRoot”是一個View或者說ViewGroup,是最初始的根視圖。?

  • “ViewRoot”通過addView方法來一個個的添加View。比如TextView,Button等?

  • 這些View的事件監(jiān)聽,是由WindowManagerService來接受消息,并且回調(diào)Activity函數(shù)。比如onClickListener,onKeyDown等

  • 02

    Android進程間通訊的幾種姿勢?

    進程間通信即IPC,英文全稱Inter-Process Communication,是指進程間數(shù)據(jù)交互的過程. Android底層是基于Linux,而Linux基于安全考慮,是不允許兩個進程間直接操作對方的數(shù)據(jù),這就是進程隔離. 六種常用姿勢:

  • Bundle

  • 文件共享

  • AIDL

  • Messenger

  • ContentProvider

  • Socket

  • 03

    談談對責任鏈模式的理解

    使很多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。

    何時使用:

  • 有許多對象可以處理用戶請求,希望程序在運行期間自動確定處理用戶的那個對象。

  • 希望用戶不必明確指定接收者的情況下,想多個接受者的一個提交請求

  • 程序希望動態(tài)的指定可處理用戶請求的對象集合

  • 優(yōu)點:

  • 低耦合

  • 可以動態(tài)的添加刪除處理者或重新指派處理者的職責

  • 可以動態(tài)改變處理者之間的先后順序

  • 通常來說,一個純粹的責任鏈是先傳給第一個處理,如果處理過了,這個請求處理就此結(jié)束,如果沒有處理,再傳給下一個處理者。

    比如我們有一個數(shù)學公式,有一個整數(shù)輸入,要求小于0時返回絕對值,其次,小于10的時候返回他的二次冪,否則,返回他本身:

    首先我們要定義一個接口(處理者),來描述他們共有的行為:

    public interface Handler {
    int handleRequest(int n);
    void setNextHandler(Handler next);
    }

    然后是具體的處理者

    public class Handler1 implements Handler {
    private Handler next;
    @Override
    public int handleRequest(int n) {
    if(n<0) return -n;
    else{
    if(next==null)
    throw new NullPointerException("next 不能為空");
    return next.handleRequest(n);
    }
    }

    @Override
    public void setNextHandler(Handler next) {
    this.next = next;
    }
    }public class Handler2 implements Handler {
    private Handler next;
    @Override
    public int handleRequest(int n) {
    if(n<10) return n*n;
    else{
    if(next==null)
    throw new NullPointerException("next 不能為空");
    return next.handleRequest(n);
    }
    }

    @Override
    public void setNextHandler(Handler next) {
    this.next = next;
    }
    }public class Handler3 implements Handler {
    private Handler next;
    @Override
    public int handleRequest(int n) {
    if(n<=Integer.MAX_VALUE) return n;
    else{
    if(next==null)
    throw new NullPointerException("next 不能為空");
    return next.handleRequest(n);
    }
    }

    @Override
    public void setNextHandler(Handler next) {
    this.next = next;
    }
    }public class TestUse {
    public static void main(String args[]){
    Handler h1,h2,h3;
    h1 = new Handler1();
    h2 = new Handler2();
    h3 = new Handler3();
    h1.setNextHandler(h2);
    h2.setNextHandler(h3);
    System.out.println(h1.handleRequest(-1));
    System.out.println(h1.handleRequest(5));
    System.out.println(h1.handleRequest(9999));
    }
    }

    此處責任鏈中的具體處理者的順序是不能重設(shè)的,否則可能會引發(fā)錯誤,但更多的情況是完全可以隨意更改他們的位置的,就上例中,只要把if中的條件重新設(shè)置(各自獨立,不相互依賴),就可以了。

    我們使用責任鏈模式的時候,不一定非得某一處理者處理后就得終止請求的傳遞,如果有其他需求,我們依然可以繼續(xù)傳遞這個請求到下一個具體的處理者。

    04

    Https三次握手四次揮手?

    三次握手:在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務,采用三次握手建立一個連接。(1)第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;(2)第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器 進入SYN_RECV狀態(tài);(3)第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入 ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶端與服務器開始傳送數(shù)據(jù).

    四次分手:(1)客戶端A發(fā)送一個FIN,用來關(guān)閉客戶A到服務器B的數(shù)據(jù)傳送。(2)服務器B收到這個FIN,它發(fā)回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。(3)服務器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A。(4)客戶端A發(fā)回ACK報文確認,并將確認序號設(shè)置為收到序號加1。

    05

    Android的存儲方式?

    Android提供了5中存儲數(shù)據(jù)的方式,分別是以下幾種:

    1、使用Shared Preferences存儲數(shù)據(jù),用來存儲key-value,pairs格式的數(shù)據(jù),它是一個輕量級的鍵值存儲機制,只可以存儲基本數(shù)據(jù)類型。

    2、使用文件存儲數(shù)據(jù),通過FileInputStream和FileOutputStream對文件進行操作。在Android中,文件是一個應用程序私有的,一個應用程序無法讀寫其他應用程序的文件。

    3、使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù),Android提供的一個標準數(shù)據(jù)庫,支持SQL語句。

    4、使用Content Provider存儲數(shù)據(jù),是所有應用程序之間數(shù)據(jù)存儲和檢索的一個橋梁,它的作用就是使得各個應用程序之間實現(xiàn)數(shù)據(jù)共享。它是一個特殊的存儲數(shù)據(jù)的類型,它提供了一套標準的接口用來獲取數(shù)據(jù),操作數(shù)據(jù)。系統(tǒng)也提供了音頻、視頻、圖像和個人信息等幾個常用的Content Provider。如果你想公開自己的私有數(shù)據(jù),可以創(chuàng)建自己的Content Provider類,或者當你對這些數(shù)據(jù)擁有控制寫入的權(quán)限時,將這些數(shù)據(jù)添加到Content Provider中實現(xiàn)共享。外部訪問通過Content Resolver去訪問并操作這些被暴露的數(shù)據(jù)。

    5、使用網(wǎng)絡(luò)存儲數(shù)據(jù)

    06

    結(jié)束語?

    如果你有好的答案可以提交至:

    https://github.com/codeegginterviewgroup/CodeEggDailyInterview

    往期文章:

    • ? 《每日一道面試題》第一期

    • 《每日一道面試題》 第二期

    • 《每日一道面試題》 第三期

    • 《每日一道面試題》第四期

    • ? 《每日一道面試題》第五期

    • 《每日一道面試題》 第六期

    • 《每日一道面試題》 第七期

    • 《每日一道面試題》 第八期

    專屬社群:

    《這件事情,我終于想明白了》?

    今日問題:

    大家想看什么類型的文章?

    總結(jié)

    以上是生活随笔為你收集整理的重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。