2012-02-17 50 views
0

我tryng時使用此代碼的景觀時開啓人像proximitywakelock和關閉,但它始終保持活躍:如何關閉wakelock?

//in onCreate() of my Activity 

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mProximityWakeLock = pm.newWakeLock(32, ""); // proximity_wake_lock=32 
    mProximityWakeLock.setReferenceCounted(false); 

    if (getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "non landascape", Toast.LENGTH_SHORT).show(); 

     if (!mProximityWakeLock.isHeld()) { 
      mProximityWakeLock.acquire(); 
      Toast.makeText(this, "acquired", Toast.LENGTH_SHORT).show(); 
     } 

     if (!mProximityWakeLock.isHeld()) 
      Toast.makeText(this, "not held", Toast.LENGTH_SHORT).show(); 
     else 
      Toast.makeText(this, " held", Toast.LENGTH_SHORT).show(); 

    } else { 

     if (!mProximityWakeLock.isHeld()) 
      Toast.makeText(this, "not held", Toast.LENGTH_SHORT).show(); 
     else 
      Toast.makeText(this, " held", Toast.LENGTH_SHORT).show(); 

     Toast.makeText(this, "landascape", Toast.LENGTH_SHORT).show(); 

     if (mProximityWakeLock.isHeld()) { 
      mProximityWakeLock.release(); 
      Toast.makeText(this, "released", Toast.LENGTH_SHORT).show(); 
     } 

    } 

看起來它從未舉行的風景時... 如何isHeld()實際工作? 代碼有什麼問題?

+0

這聽起來像你需要在清單文件上聲明wakelock的東西 – jap1968 2012-02-17 13:05:41

+0

已經有 2012-02-17 13:06:49

回答

0

我覺得你每次旋轉屏幕時都會創建一個新的喚醒鎖,並且新的喚醒鎖不能保持。

如果您查看日誌,您可能會看到有關泄漏喚醒鎖的信息。

+0

你爲什麼這麼說?喚醒對象的創建在定向檢查之外(之前)。 – 2012-02-17 13:45:21

+0

@Deleted我在說每次旋轉屏幕時都會創建一個新的wakeLock。但你有沒有發佈舊的?例如。在'onDestroy()'(可能不是最好的地方,因爲它不被保證被稱爲,但你我希望你明白我的意思)。 – tidbeck 2012-02-20 09:51:37