У меня есть Raspberry Pi 3 под управлением Android Things. Для простоты предположим, что он вращает только шаговый двигатель.
Чтобы еще раз упростить ситуацию, шаговый двигатель вращается, сообщая катушке за катушкой, какие из них заряжать, а какие нет. В Raspberry Pi вы подключаете четыре выходных контакта к четырем входным контактам шагового двигателя. Затем вы запускаете кегли один за другим в непрерывной последовательности с несколькими миллисекундами между каждым запуском.
Если я остановлю программу в Android Studio, нажав Stop «MainActivity», программный код будет убит, но выходные контакты в Raspberry Pi все равно останутся заряженными. В моем случае, если я остановлю программу в Android Studio, одна из катушек моего шагового двигателя останется заряженной (и перегреется).
ВОПРОС: Как лучше всего выполнить очистку в Android перед завершением работы программы?
Я пробовал onDestroy () и onPause (), но ни один из них не гарантированно будет вызван при закрытии программы. (В моем случае они тоже никогда не работали).
Я также попытался добавить ловушку отключения, но даже это не отключает выходной контакт. Shutdownhook, расположенный в методе onCreate () MainActivity, выглядит следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run(){
try{
mRobotics.stopMotor();
} catch (Exception e){
// Ignore error
}
}
});
// onCreate continues...
Метод stopMotor () выглядит так:
public void stopMotor(){
this.motorHandler.removeCallbacksAndMessages(null);
try {
mStepper1.setValue(false);
mStepper2.setValue(false);
mStepper3.setValue(false);
mStepper4.setValue(false);
} catch (Exception e){
// Nothing here
}
}
Есть много связанных вопросов, например, об остановке потоков при закрытии программы, но я не нашел в StackOverflow ничего, что работало бы в моем случае.