Java 恢复应用程序时线程重置

Java 恢复应用程序时线程重置,java,android,multithreading,arduino,Java,Android,Multithreading,Arduino,求你了,我需要帮助!! 我创建了一个应用程序,它通过单独的线程(ReadingProcessor)从arduino读取数据,并将值填充到读数[],然后我创建了另一个单独的线程来检查这些值。在该检查中,如果是第一次出现警告,则应用程序将发送消息,否则,如果之前有警告读数,则应用程序应等待,直到超过警告间隔 public class WarningProcessor extends Thread { float readings[]; float[] min, max; long elapsedT

求你了,我需要帮助!! 我创建了一个应用程序,它通过单独的线程(ReadingProcessor)从arduino读取数据,并将值填充到读数[],然后我创建了另一个单独的线程来检查这些值。在该检查中,如果是第一次出现警告,则应用程序将发送消息,否则,如果之前有警告读数,则应用程序应等待,直到超过警告间隔

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);
    }
}

所以请帮帮我,我尝试了太多的解决方案,比如使用handler,我遇到了相同的问题

每次将应用程序返回前台时都会调用onStart。您的问题是每个线程都有多个实例在运行。如果您只希望每个线程运行一个实例,则需要在onCreate而不是onStart中创建和启动线程。通常,如果要在onPause中终止线程,则只应在onStart中启动它

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();
}