2016-07-26 66 views
3

我在Android上的代碼中遇到問題。 我試圖使用Firebase Realtime Database有一個基於雲的地方,我可以即時更新數據並將其立即返回給我,但問題在於它只是在屏幕打開時執行我想要的代碼。 我需要的是是我想要在屏幕關閉時每次更改數據時執行一行代碼,這可能嗎? 謝謝大家在屏幕處於睡眠狀態時運行命令firebase

@Override 
    protected void onStart(){ 
     super.onStart(); 
     mref = new Firebase("https://connection-4f6d8.firebaseio.com/condition"+a_id); 
     mref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       String text = dataSnapshot.getValue(String.class); 
       if(text.equals("UNLOCKED")){ 
        sendDataonWIfi("0"); 
       } 
      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 
    } 

@Override 
    protected void onStop() { 
     super.onStop(); 
     mref = new Firebase("https://connection-4f6d8.firebaseio.com/condition"+a_id); 
     mref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       String text = dataSnapshot.getValue(String.class); 
       if(text.equals("UNLOCKED")){ 
        sendDataonWIfi("0"); 
       } 
      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 
    } 
+0

如果這些數據在ListView中,您可以嘗試在RecyclerView – Carlo

+0

nope中更改它,它在textview中 –

+0

您應該添加事件偵聽器onCreate。您不需要每次都在onStart和onStop中添加它。 –

回答

2

我猜你的代碼沒有運行一塊當設備進入睡眠模式。要解決這個問題,你必須使用Wakelocks。當您獲取喚醒鎖時,它會阻止設備返回睡眠模式,直到您釋放它。

您可以使用喚醒式廣播接收器,該接收器需要喚醒鎖並啓動服務。當你的工作完成後,釋放喚醒鎖。

在使用wakelocks小心,因爲它會耗盡電池 更快,如果你不能讓設備返回到睡眠模式(低功率消耗 模式)。您可以在下面的鏈接找到的實現細節:

https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html

+0

嗨我已經嘗試過,但它不工作,因爲代碼運行在onStop方法,,有沒有onSleep方法? –

+0

如果你能分享代碼,我可以告訴你需要做什麼改變。 –

+0

我現在更新了它 –

0

使用調用OnStop()來運行代碼,你想有運行時屏幕上是應該爲此努力。更好地瞭解活動生命週期。 https://developer.android.com/reference/android/app/Activity.html

+0

所以...如果我把代碼放在onStop方法?即使屏幕關閉,它也會運行代碼? –

+0

這應該是工作的。儘管開發人員在安卓網站上提供了建議,反對在手機處於睡眠狀態時進行強化操作,因爲他們提到這可能會阻礙開始新的活動。 https://developer.android.com/training/basics/activity-lifecycle/pausing.html –