2013-12-09 4 views
0

Пожалуйста, мне нужна помощь! Я создал приложение, которое считывает данные из arduino через отдельный поток (ReadingProcessor) и заполняет значения в показаниях [], затем я создал другой отдельный поток, который проверяет значения. В этих проверках, если это первый раз, когда происходит предупреждение, то приложение посылает сообщение, в противном случае, если есть предыдущие показания предупреждения, приложение должны ждать до прохождения предупредительного интервалаСброс нити при возобновлении подачи заявки

public class WarningProcessor extends Thread { 

float readings[]; 
float[] min, max; 
long elapsedTime; 
long[] lastWarningTime; 
boolean[] inWarning; 
long checkInterval = Long.parseLong(Settings.Swarning) * 60000; 
long currentTime; 
SerialActivity sa = new SerialActivity(); 

WarningProcessor(float readings[]) { 
    this.readings = readings; 
} 

@Override 
public void run() { 
    sleep_s(2); 
    synchronized (readings) { 
     lastWarningTime = new long[readings.length]; 
     inWarning = new boolean[readings.length]; 
     Arrays.fill(inWarning, false); 
    } 
    while (true) { 
     this.readings = ReadingProcessor.readings; 
     synchronized (readings) { 
      for (int i = 0; i < readings.length; i++) { 
       currentTime = Calendar.getInstance().getTimeInMillis(); 
       if (readings[i] > 100) { //here to make boundaries 
        if (inWarning[i] == false) { 
         //send warning 
         for(String number : StartPage.phoneNumbers) 
         SmsManager.getDefault().sendTextMessage(number, 
           null,"Warning "+readings[i], null, null);  
         lastWarningTime[i] = currentTime; 
         inWarning[i] = true; 
        } else { 
         if (currentTime - lastWarningTime[i] > checkInterval) { 
          //send warning 
          for(String number : StartPage.phoneNumbers) 
          SmsManager.getDefault().sendTextMessage(number, 
          null,"Warning "+readings[i], null, null); 
          lastWarningTime[i] = currentTime; 
         } 
        } 

       } else { 
        inWarning[i] = false; 
       } 
      } 
     } 
     sleep_s(1); 
    } 
} 

В случае непрерывных данных предостерегавших программа должна отправлять сообщение в интервале, и это хорошо работает, когда я все еще работаю, а также когда я состою onpause(), но проблема в том, что после onpause(), когда я возвращаюсь к пользовательскому интерфейсу приложения, программа пересылает сообщения в случае непрерывного интервала, отбрасывание ожидания до прохождения интервала

public class SerialActivity extends Activity { 

private static ArduinoSerialDriver sDriver; 
private static TextView mDumpTextView; 
private static ScrollView mScrollView; 
String Data[]={"Temperature"}; 
float[] readings = new float[Data.length]; 
ReadingProcessor readingProcessor; 
WarningProcessor warningProcessor; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.serialactivity); 
    mDumpTextView = (TextView) findViewById(R.id.consoleText); 
    mScrollView = (ScrollView) findViewById(R.id.demoScroller);} 






@Override 
protected void onStart() { 
    super.onStart(); 
    ReadingProcessor rp = new ReadingProcessor(readings,sDriver); 
    readingProcessor=rp; 
    WarningProcessor wp = new WarningProcessor(readings); 
    warningProcessor=wp; 
    rp.start(); 
    wp.start(); 
} 


@SuppressWarnings("deprecation") 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    readingProcessor.Stop(); 
    warningProcessor.stop(); 
} 

Так что, пожалуйста, помогите мне, Я пробовал слишком много решений, таких как использование обработчика, и у меня такая же проблема.

ответ

0

onStart вызывается каждый раз, когда вы возвращаете приложение на передний план. Ваша проблема в том, что у вас есть несколько экземпляров каждого потока. Если вам нужен только один экземпляр каждого потока, вам нужно создать и запустить потоки в onCreate вместо onStart. В общем, вы должны только начать поток в onStart, если вы собираетесь убить его в onPause.

+0

Большое спасибо – Moussawi

Смежные вопросы