安卓開發app在後臺運行時頁面數據被系統清除後操作之重啟APP

来源:https://www.cnblogs.com/qynprime/archive/2018/09/05/9594331.html
-Advertisement-
Play Games

在安卓開發過程中,當點擊HOME鍵,將app運行在後臺時,然後再點擊app圖標進入時,遇到瞭如下兩種情況: 1、每次打開時,app的入口頁面總是被執行。 2、當運行記憶體被其它應用占用完時,在進入app時,home時的當前頁面數據沒有被清除(待進一步確認),此時頁面正常,點擊返回鍵之後顯示的頁面數據被 ...


在安卓開發過程中,當點擊HOME鍵,將app運行在後臺時,然後再點擊app圖標進入時,遇到瞭如下兩種情況:

1、每次打開時,app的入口頁面總是被執行。

2、當運行記憶體被其它應用占用完時,在進入app時,home時的當前頁面數據沒有被清除(待進一步確認),此時頁面正常,點擊返回鍵之後顯示的頁面數據被清除了,而導致應用崩潰。

下麵將針對這兩個問題的處理方式進行相對應的說明。

一、如果activity的啟動方式是singleTask,則會出現此問題。如果是預設的standard方式,則沒有這樣的問題(待進一步確認)。但是很多時候都需要使用singleTask方式啟動界面,這時需要在app入口的界面的oncreate()方法中做以下處理。

if (!isTaskRoot()){
finish();
return;
}
說明:isTaskRoot():用來判斷當前Activity是不是該任務棧中的根Activity,也就是說是不是一個啟動的Activity。並且該activity是否被啟動過。
    moveTaskToBack(boolean momRoot):是把當前的Activity退到後臺,不是finish,並不會走ondestory()。參數nonRoot表示的含義是此方法對非根activity是否有效,也就是說true表示對所有activity均有效,false表示只對根activity有效。
    此時要註意該界面銷毀時所做的操作,要避免空指針異常。
二、這裡要講兩個方法:
1、
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putBoolean(SaveState,true);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SaveState,true);
}
onSaveInstanceState方法有這兩個,第一個使用在非FragementActivity中,而第二個用在FragementActivity中。
該方法會在系統自動清除組件里的數據時會被調用。
2、
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.putBoolean(SaveState,true);
}
該方法會在系統銷毀組件時會被調用。
用這兩個方法保存的變數,可以在組件的onCreate(Bundle savedInstanceState)方法中取出。每次界面數據被清理掉之後,再顯示到前臺時,都會重新走生命周期。Fragement有自己的生命周期,也需要做處理。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、下載 下載頁面http://dev.mysql.com/downloads/mysql/ 選擇系統平臺後,點擊download(根據系統選擇64或32位) 二、配置 1、下載成功後,解壓安裝包到要安裝的位置,我是安裝在”D:\MySql\” 如果安裝目錄下包含data文件夾,刪除 2、在環境變數 ...
  • windows 下安裝mysql 1.先下載好 mysql5.7 版本的安裝包,可以去官網自己下載,也可以從我的百度雲分享 裡面下載: 鏈接: https://pan.baidu.com/s/1VXkpV1OUwqWjX091j2NC6g 密碼: ea3h 2.下載後雙擊安裝包開始 mysql5.7 ...
  • MySQL 查詢優化之 Block Nested-Loop 與 Batched Key Access Joins 在MySQL中,可以使用批量密鑰訪問(BKA)連接演算法,該演算法使用對連接表的索引訪問和連接緩衝區。 BKA演算法支持:內連接,外連接和半連接操作,包括嵌套外連接。 BKA的優點:更加高效的 ...
  • 前言: 實話說,我想做的是Mysql集群架構。 我的計劃是: 1.實現Docker下的Mysql主從複製 2.實現MyCat基於Mysql的讀寫分離 3.實現MyCat的分庫分表 4.實現pxc集群 5.綜合MyCat和pxc實現高可用、高併發的資料庫集群架構 當然,現在的我還是一個小菜鳥,尤其是第 ...
  • 一. perror 錯誤代碼查看工具 在mysql 的使用過程中,可能會出現各種各樣的error。這些error有些是由於操作系統引起的,比如文件或者目錄不存在等等,使用perror的作用就是解釋這些錯誤代碼的詳細含義。 perror 使用方法如下: 例如:指定錯誤號30和60分別是指什麼錯誤 在M ...
  • 由於mysql預設8小時連接無訪問,就會斷開.為此查了一下資料,有同種比較簡單的解決方案: 1. 增加 MySQL 的 wait_timeout 屬性的值。 修改 /etc/mysql/my.cnf文件,在 [mysqld] 節中設置: # Set a connection to wait 8hou ...
  • 使用SSMS資料庫管理工具修改DEFAULT約束 1、連接資料庫、選擇數據表-》右鍵點擊-》選擇設計。 2、在表設計器視窗-》選中要修改的數據列-》在列屬性中找到預設值綁定-》進行修改。 3、點擊保存(或者ctrl+s)-》關閉表設計器-》刷新表-》重新打開表設計器查看。 使用T-SQL腳本修改DE ...
  • 註:原文轉自 https://blog.csdn.net/zsg88/article/details/73715947 ,僅用作為方便查閱 一 所需軟體:Redis、Ruby語言運行環境、Redis的Ruby驅動redis-xxxx.gem、創建Redis集群的工具redis-trib.rb 二 安 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...