MessageQueue方法:postSyncBarrier讳嘱、removeSyncBarrier

測(cè)試同步屏障

1波材、ThreadHandler.kt

package com.maotai.testapplication

import android.os.*
import com.yh.base.lib.log.LogUtils

/**
 *  $
 * @date: 2022/2/22 5:13 下午
 * @author: zengbobo
 */
object ThreadHandler {
    private var mHandler: Handler? = null
    fun main() {
        Thread {
            Looper.prepare()
            mHandler = MyHandler(Looper.myLooper()!!)
            Looper.loop()
        }.start()
    }

    class MyHandler(looper: Looper) : Handler(looper) {
        override fun handleMessage(msg: Message) {
            super.handleMessage(msg)
            LogUtils.i("ThreadHandler handleMessage $msg")
        }
    }

    fun sendEmptyMessage() {
        mHandler?.sendEmptyMessage(1)
    }

    fun sendAsyncMessage() {
        mHandler?.obtainMessage(2)?.apply {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                isAsynchronous = true
            }
            mHandler?.sendMessage(this)
        }
    }

    private var mTraversalBarrier:Int = 0
    fun postSyncBarrier() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val queue = mHandler?.looper?.queue
            var postSyncBarrier =
                queue?.javaClass?.getDeclaredMethod("postSyncBarrier", Long::class.java)//
            postSyncBarrier?.isAccessible = true
            mTraversalBarrier =
                (postSyncBarrier?.invoke(queue, SystemClock.uptimeMillis()+10000) as? Int)?:0//
        }
    }

    //removeSyncBarrier方法參數(shù)需要使用postSyncBarrier方法的返回值(mTraversalBarrier)
    fun removeSyncBarrier() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val queue = mHandler?.looper?.queue
            var removeSyncBarrier =
                queue?.javaClass?.getDeclaredMethod("removeSyncBarrier", Int::class.java)
            removeSyncBarrier?.isAccessible = true
            removeSyncBarrier?.invoke(queue,mTraversalBarrier)
        }
    }
}

2、LooperActivity.kt

package com.maotai.testapplication

import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity

class LooperActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ThreadHandler.main()
        findViewById<TextView>(R.id.tv1)?.apply {
            text ="sendMessage"
            setOnClickListener {
                ThreadHandler.sendEmptyMessage()
            }
        }
        findViewById<TextView>(R.id.tv2)?.apply {
            text ="sendAsyncMessage"
            setOnClickListener {
                ThreadHandler.sendAsyncMessage()
            }
        }
        findViewById<TextView>(R.id.tv3)?.apply {
            text ="postSyncBarrier"
            setOnClickListener {
                ThreadHandler.postSyncBarrier()
            }
        }

        findViewById<TextView>(R.id.tv4)?.apply {
            text ="removeSyncBarrier"
            setOnClickListener {
                ThreadHandler.removeSyncBarrier()
            }
        }
    }
}

3挺狰、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="20dp"
        android:text=" FirstActivity"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="20dp"
        android:text=" LayoutActivity"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="20dp"
        android:text=" NormalActivity"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="20dp"
        android:text=" LooperActivity"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末明郭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子丰泊,更是在濱河造成了極大的恐慌薯定,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞳购,死亡現(xiàn)場(chǎng)離奇詭異话侄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)学赛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門年堆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人盏浇,你說(shuō)我怎么就攤上這事变丧。” “怎么了缠捌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵锄贷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我曼月,道長(zhǎng)谊却,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任哑芹,我火速辦了婚禮炎辨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘聪姿。我一直安慰自己碴萧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布末购。 她就那樣靜靜地躺著破喻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盟榴。 梳的紋絲不亂的頭發(fā)上曹质,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼羽德。 笑死几莽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宅静。 我是一名探鬼主播章蚣,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姨夹!你這毒婦竟也來(lái)了纤垂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匀伏,失蹤者是張志新(化名)和其女友劉穎洒忧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體够颠,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熙侍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了履磨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛉抓。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖剃诅,靈堂內(nèi)的尸體忽然破棺而出巷送,到底是詐尸還是另有隱情,我是刑警寧澤矛辕,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布笑跛,位于F島的核電站,受9級(jí)特大地震影響聊品,放射性物質(zhì)發(fā)生泄漏飞蹂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一翻屈、第九天 我趴在偏房一處隱蔽的房頂上張望陈哑。 院中可真熱鬧,春花似錦伸眶、人聲如沸惊窖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)界酒。三九已至,卻和暖如春嘴秸,著一層夾襖步出監(jiān)牢的瞬間盾计,已是汗流浹背售担。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留署辉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓岩四,卻偏偏與公主長(zhǎng)得像哭尝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剖煌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容