2015-11-28 26 views
0

Fragment中有一個耗時的任務(一個線程)。它工作正常。但是,當我關閉屏幕時,我發現CPU無法工作,因此任務無法正常工作。如何在關閉屏幕時保持CPU運行?

我在Activity中使用PowerManager,但是也沒有工作Fragment。 另外補充<uses-permission android:name="android.permission.WAKE_LOCK" />

@Override 
protected void onResume() { 
    super.onResume(); 
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CPUKeepRunning"); 
    wakeLock.acquire(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (wakeLock != null && wakeLock.isHeld()) { 
     wakeLock.release(); 
     wakeLock = null; 
    } 
} 

我已經看到了CPU enter image description here

+0

避免使用在片段或活性長時間運行的操作。嘗試將您的線程替換爲服務,並在開始操作之前獲取wakeLock,並在結束長時間運行後釋放wright – ant

+0

爲什麼服務不線程? – zys

+0

你可以使用線程內服務。服務創建執行長時間運行的操作,並儘量減少在活動或片段中使用長時間運行的線程時可能發生的各種麻煩。你可以在這裏閱讀很多關於服務的內容http://developer.android.com/guide/components/services.html – ant

回答

1

通過服務來運行你的代碼,如果你在活動運行它,它會一次活動進入後臺停止。改爲使用服務。

http://developer.android.com/training/run-background-service/create-service.html http://developer.android.com/guide/components/services.html

+0

我使用'WakefulBroadcastReceiver'和'IntentService'。它工作的很好! [http://developer.android.com/intl/zh-cn/training/scheduling/wakelock.html](http://developer.android.com/intl/zh-cn/training/scheduling/wakelock.html) – zys

+0

很高興聽到! –

相關問題