Notification 配置記錄與防止APP被殺總結(jié)

參考文章

仿微信通知欄
Android基礎(chǔ)知識(shí)(二十):Notification、提醒式通知(橫幅)踩坑與通知界面設(shè)置跳轉(zhuǎn)
PendingIntent.getActivity的使用

Android平臺(tái)App進(jìn)程優(yōu)先級(jí)
Android 程序后臺(tái)運(yùn)行和鎖屏運(yùn)行

重要記錄點(diǎn)

1、setSmallIcon、setLargeIcon 必須設(shè)置半沽。設(shè)置小圖標(biāo)的時(shí)候实抡,小圖標(biāo)是需要透明背景脂矫,實(shí)體區(qū)域用白色的就可以了吏垮,大小64 * 64吧捐腿,這個(gè)可以修改
2课锌、華為目前是不可以通過代碼設(shè)置橫幅的厨内,想要顯示橫幅出來祈秕,需要自己手動(dòng)的去通知欄那打開。微信,QQ有錢沒辦法雏胃,天生就可以默認(rèn)橫幅请毛,在notification設(shè)置震動(dòng)也無效,估計(jì)所有的開發(fā)商都有修改過notification吧
3瞭亮、可以在線程創(chuàng)建notification
4方仿、開啟橫幅方式(修改過底層的除開),將通知等級(jí)設(shè)置最高

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//android 8.0
      val channel = NotificationChannel(ConversionChannelId, ConversionChannelName, IMPORTANCE_HIGH)
   } else {
      notificationBuilder.setPriority(NotificationCompat.PRIORITY_HIGH)
  }
importance统翩、priority都必須設(shè)置到高值

5仙蚜、設(shè)置通知欄不消失的方式

        var notificationBuilder: NotificationCompat.Builder? = null
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//android 8.0
            notificationBuilder = NotificationCompat.Builder(CommonApplication.getContext(), SingleAppChannelId)
        } else {
            notificationBuilder = NotificationCompat.Builder(CommonApplication.getContext())
        }
        notificationBuilder.let {
            val notification = notificationBuilder.build();
            notification.flags = notification.flags or Notification.FLAG_ONGOING_EVENT//不消失的通知欄
        }

6、如果我不開啟前臺(tái)service厂汗,只是將notification設(shè)置為不消失的通知欄委粉,按下home鍵后,主oom_adj的值為11娶桦,子進(jìn)程為15贾节。主與子易被殺死

只開啟notification_不消失.jpg

7、主進(jìn)程開啟前臺(tái)Service趟紊,按下home鍵后,oom_adj的值為3碰酝,如果此時(shí)有子進(jìn)程霎匈,子進(jìn)程的oom_adj的值為15。子易被殺死


oom_adj_比較.jpg

8送爸、目前學(xué)習(xí)到盡量不被殺的辦法

1铛嘱、主進(jìn)程開啟前臺(tái)service
2、service里面監(jiān)聽開屏袭厂、息屏廣播墨吓。不管開屏、息屏都循環(huán)播放無聲音樂纹磺。目前oppo是無法監(jiān)聽到開屏息屏的通知的帖烘,所以需要單獨(dú)處理,如果是oppo橄杨,vivo秘症,直接播放無聲音樂好了
3、定時(shí)的調(diào)用startForeground刷新notification式矫,當(dāng)然要保證notification的id都相同
4乡摹、開啟service同時(shí)獲取PowerManager,并且調(diào)用acquire()方法采转,避免息屏的時(shí)候CPU直接睡眠聪廉,不執(zhí)行代碼

當(dāng)然了,你退出APP之后,以上系列的所有操作板熊,都需要進(jìn)行 一 一 關(guān)閉
知識(shí)點(diǎn)記錄

1框全、PendingIntent.getActivity知識(shí)點(diǎn)

PendingIntent.getActivity(Context context, int requestCode,  intent, int flags)
第一個(gè)參數(shù)連接上下文的context
第二個(gè)參數(shù)是對(duì)PendingIntent的描述,請(qǐng)求值不同Intent就不同
第三個(gè)參數(shù)是一個(gè)Intent對(duì)象邻邮,包含跳轉(zhuǎn)目標(biāo)
第四個(gè)參數(shù)有4種狀態(tài)

FLAG_CANCEL_CURRENT:如果當(dāng)前系統(tǒng)中已經(jīng)存在一個(gè)相同的PendingIntent對(duì)象竣况,那么就將先將已有的PendingIntent取消,然后重新生成一個(gè)PendingIntent對(duì)象筒严。

FLAG_NO_CREATE:如果當(dāng)前系統(tǒng)中不存在相同的PendingIntent對(duì)象丹泉,系統(tǒng)將不會(huì)創(chuàng)建該P(yáng)endingIntent對(duì)象而是直接返回null。

FLAG_ONE_SHOT:該P(yáng)endingIntent只作用一次鸭蛙。在該P(yáng)endingIntent對(duì)象通過send()方法觸發(fā)過后摹恨,PendingIntent將自動(dòng)調(diào)用cancel()進(jìn)行銷毀,那么如果你再調(diào)用send()方法的話娶视,系統(tǒng)將會(huì)返回一個(gè)SendIntentException晒哄。

FLAG_UPDATE_CURRENT:如果系統(tǒng)中有一個(gè)和你描述的PendingIntent對(duì)等的PendingInent,那么系統(tǒng)將使用該P(yáng)endingIntent對(duì)象肪获,但是會(huì)使用新的Intent來更新之前PendingIntent中的Intent對(duì)象數(shù)據(jù)寝凌,例如更新Intent中的Extras。

notification詳細(xì)代碼
 /**
     * @date 創(chuàng)建時(shí)間: 2021/2/1
     * @auther gaoxiaoxiong
     * @description 顯示信息孝赫,這個(gè)需要在線程創(chuàng)建较木,因?yàn)轭^像的獲取是線程
     **/
    fun showChatNotification(context: Context) {
        // 創(chuàng)建一個(gè)NotificationManager的引用
        val mNotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager;
        var notificationBuilder: NotificationCompat.Builder? = null
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//android 8.0
            notificationBuilder = NotificationCompat.Builder(CommonApplication.getContext(), ConversionChannelId)
            val channel = NotificationChannel(ConversionChannelId, ConversionChannelName, IMPORTANCE_HIGH)
            channel.description = ConversionChannelName;
            mNotificationManager.createNotificationChannel(channel);
        } else {
            notificationBuilder = NotificationCompat.Builder(CommonApplication.getContext())
            notificationBuilder.setPriority(NotificationCompat.PRIORITY_HIGH)
        }

        val intent = Intent(context,MainActivity::class.java);
        intent.putExtra(MainActivity.ID,10);

        notificationBuilder.let {
            it.setWhen(System.currentTimeMillis());
            it.setSmallIcon(R.drawable.icon_sml_notification)//設(shè)置小圖標(biāo),設(shè)置后在狀態(tài)欄部分顯示青柄,注意伐债,小圖標(biāo)是需要透明背景的,實(shí)體會(huì)話部分用白色的就可以了致开。大小64 * 64吧峰锁,這個(gè)可以修改
            var userHeaderBitmap = GetImageInputStream(daoChatRecordModel.visitorAvatar);//獲取網(wǎng)絡(luò)圖片
            if (userHeaderBitmap == null) {
                userHeaderBitmap = BitmapFactory.decodeResource(CommonApplication.getContext().getResources(), R.mipmap.icon_logo)
            }
            it.setLargeIcon(userHeaderBitmap);//設(shè)置大圖標(biāo)
            it.setContentTitle(StringUtils.isEmptyValue(daoChatRecordModel.visitorVame));//設(shè)置標(biāo)題
            it.setContentText(ResourcesUtils.getResourcesString(context, R.string.conversation_shopmessage))//設(shè)置文本信息
            //設(shè)置當(dāng)點(diǎn)擊通知之后,將要跳轉(zhuǎn)的Activity
            it.setContentIntent(PendingIntent.getActivity(context, 15, intent, PendingIntent.FLAG_UPDATE_CURRENT))
            //彈出通知双戳,懸浮在通知欄
            it.setFullScreenIntent(PendingIntent.getActivity(context, 15, intent, PendingIntent.FLAG_UPDATE_CURRENT), true)
            //設(shè)置通知在第一次到達(dá)時(shí)在狀態(tài)欄中顯示的文本
            it.setTicker(StringUtils.isEmptyValue(daoChatRecordModel.content))
            it.setAutoCancel(true)//可以取消

            it.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)//顯示通知的全部?jī)?nèi)容
            it.setPriority(NotificationManager.IMPORTANCE_MAX)// 當(dāng)發(fā)出此類型的通知時(shí)虹蒋,通知會(huì)以懸掛的方法顯示在屏幕上
            it.setSound(defaultNoticeVoice);//聲音
            it.setVibrate(longArrayOf(0, 500, 1000, 1500));//震動(dòng)

            val notification = notificationBuilder.build();
            it.setPublicVersion(notification);//安全鎖屏下的通知

            mNotificationManager.notify(11, notification)

        }
    }



 /**
     * 獲取網(wǎng)絡(luò)圖片
     *
     * @param imageurl 圖片網(wǎng)絡(luò)地址
     * @return Bitmap 返回位圖
     */
    private fun GetImageInputStream(imageurl: String): Bitmap? {
        if (StringUtils.isEmpty(imageurl)) {
            return null;
        }
        val url: URL
        var connection: HttpURLConnection? = null
        var bitmap: Bitmap? = null
        try {
            url = URL(imageurl)
            connection = url.openConnection() as HttpURLConnection
            connection.setConnectTimeout(2 * 1000) //超時(shí)設(shè)置
            connection.setDoInput(true)
            connection.setUseCaches(false) //設(shè)置不使用緩存
            val inputStream: InputStream = connection.getInputStream()
            bitmap = BitmapFactory.decodeStream(inputStream)
            inputStream.close()
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return bitmap
    }
 /**
     * @date 創(chuàng)建時(shí)間:2021/2/3 0003
     * @auther gaoxiaoxiong
     * @Descriptiion 獲取默認(rèn)的提示音
     **/
    public Uri getDefaultNoticeVoice() {
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        if (notification == null) {//獲取本地的
            return Uri.parse("android.resource://" + CommonApplication.getContext().getPackageName() + "/" + R.raw.default_notice_voice);
        } else {
            return notification;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市飒货,隨后出現(xiàn)的幾起案子千诬,更是在濱河造成了極大的恐慌,老刑警劉巖膏斤,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徐绑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡莫辨,警方通過查閱死者的電腦和手機(jī)傲茄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門毅访,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盘榨,你說我怎么就攤上這事喻粹。” “怎么了草巡?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵守呜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我山憨,道長(zhǎng)查乒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任郁竟,我火速辦了婚禮玛迄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棚亩。我一直安慰自己蓖议,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布讥蟆。 她就那樣靜靜地躺著勒虾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘸彤。 梳的紋絲不亂的頭發(fā)上修然,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音钧栖,去河邊找鬼低零。 笑死婆翔,一個(gè)胖子當(dāng)著我的面吹牛拯杠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啃奴,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼潭陪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了最蕾?” 一聲冷哼從身側(cè)響起依溯,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘟则,沒想到半個(gè)月后黎炉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡醋拧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年慷嗜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淀弹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庆械,死狀恐怖薇溃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缭乘,我是刑警寧澤沐序,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站堕绩,受9級(jí)特大地震影響策幼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逛尚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一垄惧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绰寞,春花似錦到逊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至件缸,卻和暖如春铜靶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背他炊。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工争剿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痊末。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓蚕苇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凿叠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涩笤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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

  • 讓app 的service常駐其實(shí)是很流氓的做法,但是需求擺在那里盒件。蹬碧。。 但是要清除一點(diǎn):想百分百背吹螅活servic...
    PengPengPro閱讀 16,185評(píng)論 10 65
  • 版權(quán)聲明:本文為L(zhǎng)ooperJing原創(chuàng)文章翔始,轉(zhuǎn)載請(qǐng)注明出處罗心! 自己曾經(jīng)也在這個(gè)問題上傷過腦經(jīng)片吊,前幾日剛好有一個(gè)北...
    LooperJing閱讀 29,688評(píng)論 98 481
  • Android進(jìn)程鼻渭梗活主要包括兩個(gè)方面:提高進(jìn)程的優(yōu)先級(jí),降低被殺死的概率在進(jìn)程被殺死后拉活 1.進(jìn)程優(yōu)先級(jí) An...
    hxljy閱讀 1,152評(píng)論 1 5
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)肤晓、焦點(diǎn)爷贫、注意力、語言聯(lián)想补憾、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析漫萄,社會(huì)...
    Jenaral閱讀 5,721評(píng)論 0 5
  • 城空了腾务,有樹長(zhǎng)出來 我的城死了 鑄起它的人,殺死它的人 不愿因?yàn)檫@件事而驕傲 一座城的終結(jié) 永遠(yuǎn)因?yàn)榻K結(jié)這件事而顯...
    于十六閱讀 2,859評(píng)論 6 17