Android定時(shí)關(guān)機(jī)問(wèn)題解決

昨天寫的簡(jiǎn)易APP實(shí)現(xiàn)android定時(shí)關(guān)機(jī)辈赋,今天又倒騰了一天關(guān)于定時(shí)關(guān)機(jī)的,發(fā)現(xiàn)一些問(wèn)題
1.設(shè)置定時(shí)關(guān)機(jī)循環(huán)時(shí)(設(shè)定每天為一個(gè)周期)钥屈,當(dāng)手機(jī)關(guān)機(jī)后,再開機(jī)焕蹄,這個(gè)循環(huán)定時(shí)也就失效了,實(shí)際變成了單次定時(shí)關(guān)機(jī)
最后解決的方法是:再定義一個(gè)廣播接收器,用于接收系統(tǒng)開機(jī)時(shí)發(fā)出的廣播鸦泳,當(dāng)接收到廣播時(shí),創(chuàng)建一個(gè)activity做鹰,在activity中根據(jù)之前保存的數(shù)據(jù)重新設(shè)置定時(shí)击纬,這樣就可以實(shí)現(xiàn)循環(huán)更振,下面詳解

2.按照上面的想法,還是遇到了問(wèn)題饭尝,如果要使用循環(huán),就必須靜態(tài)注冊(cè)接收開機(jī)廣播的廣播接收器钥平。但是如果這樣的話,每次開機(jī)都會(huì)接收到廣播涉瘾,并啟動(dòng)新的activity,根據(jù)保存的數(shù)據(jù)設(shè)置定時(shí)立叛,即使點(diǎn)擊了關(guān)閉定時(shí)或者取消循環(huán),也消除不了秘蛇,就是說(shuō)這個(gè)廣播接收器總會(huì)運(yùn)行,然后進(jìn)行強(qiáng)制的定時(shí)彤叉。在網(wǎng)上搜索到一個(gè)方法庶柿,說(shuō)是使用PackageManager可以使在清單文件靜態(tài)注冊(cè)的廣播變回到默認(rèn)狀態(tài)(即未注冊(cè)狀態(tài))秽浇,但是好像不能再變?yōu)樽?cè)狀態(tài)了,關(guān)于這個(gè)類柬焕,作者講的比較詳細(xì)

3.針對(duì)2的問(wèn)題,開始想到的辦法是斑举,在主activity中設(shè)置接口和一個(gè)以該接口的引用為參數(shù)的方法,然后在第二個(gè)廣播接收器中實(shí)現(xiàn)接口富玷,再根據(jù)由接口中得到的數(shù)據(jù)判斷開機(jī)后是否需要設(shè)置定時(shí)璧坟,但是在該廣播接收器中實(shí)現(xiàn)activity中的方法實(shí)在麻煩。后來(lái)發(fā)現(xiàn)這方法顯得笨拙了啊

問(wèn)題解決方法
新的廣播接收器中(就叫做BootBroadcastReceiver)雀鹃,直接啟動(dòng)新activity(就叫做BootActivity),畢竟在循環(huán)時(shí)黎茎,BootActivity是需要讀取本地保存的數(shù)據(jù)的,所以傅瞻,直接根據(jù)讀取的數(shù)據(jù)進(jìn)行判斷就好(保存的數(shù)據(jù)中有一個(gè)boolean類型的表示是是否設(shè)置了循環(huán),如果讀取的為false嗅骄,那么直接結(jié)束掉這個(gè)activity胳挎,反之運(yùn)行)溺森,下面是這個(gè)activity中的代碼串远,方法沒(méi)貼出儿惫,在GitHub有完整注釋的代碼

try {            
getData(); //獲取上一次程序退出時(shí)保存的數(shù)據(jù)            
getTime(); //將設(shè)定的時(shí)間轉(zhuǎn)換為alarmManager.set()方法中所需參數(shù)            
setAlarm(); //設(shè)置定時(shí)       
 } catch (Exception e) {           
 e.printStackTrace();        
}   
}    

小細(xì)節(jié)
為了方便使用肾请,在新activity啟動(dòng)時(shí),不應(yīng)該有界面出現(xiàn)更胖,不然每次一開機(jī)就冒出來(lái)一個(gè)app界面豈不是很不爽,但是如果只是單純?nèi)サ鬭ctivity中的setContentView的話却妨,則會(huì)在開機(jī)時(shí)出現(xiàn)一個(gè)白屏,還好activity中有針對(duì)這個(gè)的解決辦法彪标。在清單文件中,activity標(biāo)簽下添加一個(gè)屬性即可在啟動(dòng)該activity時(shí)不產(chǎn)生界面
<activity android:name=".BootActivity" android:theme="@android:style/Theme.NoDisplay"></activity>

在將字符串解析為整型的時(shí)候捞烟,把解析用的方法弄錯(cuò)了(enter按的太快),結(jié)果總是問(wèn)題题画,經(jīng)過(guò)一番折騰才發(fā)現(xiàn)默辨,用成了 Integer.getInteger,于是好奇這個(gè)看方法名像是轉(zhuǎn)換成整型的方法到底是干嘛的,網(wǎng)上說(shuō)的是

Integer.getInteger(String)的功能是根據(jù)指定的名稱得到系統(tǒng)屬性的整數(shù)值苍息。第一個(gè)參數(shù)將被認(rèn)為是系統(tǒng)屬性的名稱壹置。系統(tǒng)屬性可以通過(guò) System.getProperty(java.lang.String)方法訪問(wèn)得到。屬性值字符串將被解釋成一個(gè)整數(shù)钞护,并且以表示這個(gè)值的Integer對(duì)象形式返回

內(nèi)容就這些了,主要是對(duì)昨天的問(wèn)題進(jìn)行收尾患亿,把代碼都更新了一遍,如果需要的話押逼,可以去下載看看,看注釋很容易懂挑格,如果有錯(cuò)誤,希望留言指出來(lái)哈

(新問(wèn)題更新)

昨天小伙伴突然對(duì)我說(shuō)漂彤,我的自動(dòng)關(guān)機(jī)有重大bug,開機(jī)后馬上關(guān)機(jī)挫望,再開機(jī)還是馬上關(guān)機(jī)立润,最后還是趁著開機(jī)到關(guān)機(jī)的一小會(huì)過(guò)渡時(shí)間卸載了app才得以解決桑腮,此問(wèn)題一出,今天趕緊翻出來(lái)看看什么情況破讨。

出現(xiàn)的問(wèn)題:
1.如果設(shè)置的時(shí)間到了,自動(dòng)關(guān)機(jī)了奕纫,然后當(dāng)天再次開機(jī),于是就出現(xiàn)了這個(gè)情況匹层。
2.開機(jī)后,會(huì)提示xx已停止運(yùn)行(我記得當(dāng)時(shí)自己用的時(shí)候是沒(méi)出現(xiàn)這個(gè)問(wèn)題的又固,今天用模擬器發(fā)現(xiàn)有這個(gè)問(wèn)題)
3.改正1、2后仰冠,成功關(guān)機(jī)、開機(jī)洋只,但是出現(xiàn)了ANR

原因是這樣的:
1.AlarmManager在設(shè)置時(shí)間時(shí)辆沦,如果設(shè)置的時(shí)間小于當(dāng)前時(shí)間嗎,則會(huì)立馬執(zhí)行(當(dāng)時(shí)大意了肢扯,沒(méi)注意到這個(gè)問(wèn)題的影響),于是造就了開機(jī)后立馬關(guān)機(jī)的情況蔚晨。但是如果是第二天在設(shè)置的時(shí)間點(diǎn)之前開機(jī)則不會(huì)出現(xiàn)立馬關(guān)機(jī)的情況
2.使用Theme.NoDispaly時(shí),該Activity應(yīng)該繼承自Activity而不是AppCompatActivity
3.開機(jī)后铭腕,APP會(huì)自啟并設(shè)置提醒,然后一直在后臺(tái)什么都不做

解決:
1.在設(shè)置時(shí)間戳之前累舷,添加一個(gè)判斷,判斷當(dāng)前設(shè)置的時(shí)間是否小于當(dāng)前時(shí)間被盈,如果小于析孽,則,將day加1袜瞬,設(shè)置為第二天提醒
2.改繼承就OK
3.在自啟后執(zhí)行設(shè)置提醒后,finish()即可
(更改的代碼在GitHub中)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末身堡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盾沫,更是在濱河造成了極大的恐慌殿漠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕾哟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡莲蜘,警方通過(guò)查閱死者的電腦和手機(jī)谭确,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門逐哈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人昂秃,你說(shuō)我怎么就攤上這事禀梳〕β妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵蚀腿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我莉钙,道長(zhǎng),這世上最難降的妖魔是什么胆胰? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蜀涨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厚柳。我一直安慰自己,他們只是感情好别垮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布便监。 她就那樣靜靜地躺著,像睡著了一般碳想。 火紅的嫁衣襯著肌膚如雪烧董。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天胧奔,我揣著相機(jī)與錄音逊移,去河邊找鬼。 笑死龙填,一個(gè)胖子當(dāng)著我的面吹牛胳泉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岩遗,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扇商,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宿礁?” 一聲冷哼從身側(cè)響起案铺,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梆靖,沒(méi)想到半個(gè)月后红且,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坝茎,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年暇番,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗤放。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡壁酬,死狀恐怖次酌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舆乔,我是刑警寧澤岳服,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布吊宋,位于F島的核電站颜武,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏这吻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一唾糯、第九天 我趴在偏房一處隱蔽的房頂上張望移怯。 院中可真熱鬧这难,春花似錦、人聲如沸雁佳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至禁偎,卻和暖如春腿堤,著一層夾襖步出監(jiān)牢的瞬間笆檀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工酗洒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留樱衷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓矩桂,卻偏偏與公主長(zhǎng)得像侄榴,于是被迫代替她去往敵國(guó)和親流妻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評(píng)論 25 707
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,424評(píng)論 0 17
  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity度苔,Service服務(wù),...
    開子的私家地閱讀 1,416評(píng)論 0 5
  • 面試題總結(jié) 通用 安卓學(xué)習(xí)途徑, 尋找資料學(xué)習(xí)的博客網(wǎng)站 AndroidStudio使用, 插件使用 安卓和蘋果的...
    JingBeibei閱讀 1,677評(píng)論 2 21
  • 努力做“啞”老師 昨天喉嚨痛的瞬間說(shuō)不出話了寇窑,今天校領(lǐng)導(dǎo)又給我安排了一節(jié)全校的公開課箩张。當(dāng)我...
    清淡芳香閱讀 869評(píng)論 0 3