2012-02-17 97 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