Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 的manageSpaceActivity引發的血案

android 的manageSpaceActivity引發的血案

編輯:關於Android編程

前言:

看這篇文章首先要知道android:manageSpaceActivity 這個屬性是什麼。這個屬性是在application時候定義的,這個屬性指定了一個用於清除數據的Activity,這樣一來開發者可以向用戶指定開放那些數據用於清除,否則,默認情況是全部都會清除的。看看原文說明:

The fully qualified name of an Activity subclass that the system can launch to let users manage the memory occupied by the application on the device. The activity should also be declared with an element.

前幾天手機出現一個BUG(具體描述如下):

進入“應用程序”,然後從應用程序列表中選擇一個進入 到該應用程序信息。會發現有些應用程序是有“啟用、停用”的按鈕,並且下面還有一個“管理空間”按鈕。當你在這裡選擇“停用”按鈕後,如果你再選擇下面的“管理空間”按鈕,就會出現停止運行。打開LOG信息你會發現如下的報錯(這裡我用內置的“百度浏覽器”來做分析):

01-01 00:02:54.016: D/dalvikvm(1021): GC_FOR_ALLOC freed 1293K, 11% free 11946K/13284K, paused 26ms, total 26ms
01-01 00:02:54.017: E/AndroidRuntime(1021): FATAL EXCEPTION: main
01-01 00:02:54.017: E/AndroidRuntime(1021): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.baidu.browser.apps/com.baidu.browser.settings.BdManageSpaceActivity}; have you declared this activity in your AndroidManifest.xml?
01-01 00:02:54.017: E/AndroidRuntime(1021): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1627)

從上面的報錯信息可以明確的知道:系統調用了一個無法找到的Activity,還建議你去確認一下是否在這個app的AndroidManifest.xml是否有配置。從這個報錯信息可以很快知道這樣的結果:“百度浏覽器”這個APP肯定有問題,具體的說應該是這個APP的這個Activity:BdManageSpaceActivity存在問題,要麼沒有注冊、要麼沒有注冊對,要麼這個Activity就不存在等。不過,我要說的是:事實並非如此!

要找到問題,首先去確認一下“百度浏覽器”這個APP的BdManageSpaceActivity是否OK。讓人大跌眼鏡的是:AndroidManifest.xml裡面定義是OK的,BdManageSpaceActivity.java也是沒有問題的。下面是BdManageSpaceActivity在AndroidManifest.xml中的申明:

 
      這樣一來“百度浏覽器”確實是OK的,其實分析到這裡,我就明白了一些道理:一開始懷疑“百度浏覽器”有問題是因為上面的報錯信息,這個報錯信息誤導了我,其實早該想到“百度浏覽器”是沒有問題的,因為出現“停止運行”的情況是在別的APP經過不同尋常的操作而照成的,而一般的正常操作是OK的,既然正常操作的“百度浏覽器”的BdManageSpaceActivity這個Activity能夠正常啟用,那麼就已經說明“百度浏覽器”的BdManageSpaceActivity是沒有問題的。

好了,我們來分析第二步:看看設置裡面的“應用管理”這個APP到底在“停用”這個“百度浏覽器”做了些什麼?

mPm.setApplicationEnabledSetting(mInfo.packageName, mState, 0);
這裡的 mState = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT ,

這樣一來這個APP就被停用了,在Luncher裡面都沒有了,而且這個APP的一切活動都將被終止。 也因此通過“管理空間”去調用這個被停用的APP的一個Activity是不可能找得到的。




  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved