У меня 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, которое бы работало в моем случае.