![](/img/trans.png)
[英]How to run a function every hour, while the android app is in the background?
[英]need help on how to either delay or run function in background (android App)
我下面的代碼是我的主要活動。 基本上,每當我單擊該按鈕時,它都會首先檢查是否設置了警報,如果警報為假,它將進入循環,該循環讀取所連接設備上的RSSI,直到其高於RSSI值為止。 我的問題是我如何使此循環不崩潰我的應用程序,它目前正在這樣做。 同樣由於某種原因,mRSSI文本字段永遠不會填充RSSI值。 有人可以幫我嗎。 這是我需要完成的應用程序中的最后一件事。
public void onMonitorClick(final View view){
if (isBLEEnabled()) {
if (!isDeviceConnected()) {
// do nothing
} else if (isImmediateAlertOn == true) {
showMonitor();
DebugLogger.v(TAG, "app is high alert");
isImmediateAlertOn = true;
}
else {
DebugLogger.v(TAG, "app is no alert");
hideMonitor();
while(monitorStop != 1)
{
((ProximityService.ProximityBinder) getService()).getRssi();
rssilevel = ((ProximityService.ProximityBinder) getService()).getRssiValue();
if (rssilevel > -50 ) {
DebugLogger.v(TAG, "greater then -50");
monitorStop = 1;
}
mRSSI.setText("-" + String.valueOf(rssilevel) + "dB");
isImmediateAlertOn = false;
mFindMeButton.setEnabled(false);
}
}
} else {
showBLEDialog();
}
}
編輯重做代碼
public void onMonitorClick(final View view){
if (isBLEEnabled()) {
if (!isDeviceConnected()) {
// do nothing
} else if (monitorvis == 0) {
showMonitor();
} else if (isImmediateAlertOn == true) {
showMonitor();
DebugLogger.v(TAG, "app is high alert");
isImmediateAlertOn = true;
}
else {
DebugLogger.v(TAG, "app is no alert");
hideMonitor();
monitorStop = 0;
do { run(); run2(); } while(monitorStop != 1);
}
} else {
showBLEDialog();
}
}
protected void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
((ProximityService.ProximityBinder) getService()).getRssi();
rssilevel = ((ProximityService.ProximityBinder) getService()).getRssiValue();
mRSSI.setText("-" + String.valueOf(rssilevel) + "dB");
}
});
}
protected void run2() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mRSSI.setText("-" + String.valueOf(rssilevel) + "dB");
if (rssilevel < -60)
{
monitorStop = 1;
showMonitor();
((ProximityService.ProximityBinder) getService()).startImmediateAlert();
}
}
});
}
這是(IMHO)延遲執行一段代碼的最簡單方法:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Do what you need to do
}
}, MILISECONDS_BEFORE_EXECUTION);
在這里, MILISECONDS_BEFORE_EXECUTION
是執行代碼之前需要等待的毫秒數(常數或變量)。 Android中Handler
文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.