나는 끊임없이 호출되는 루프에 의해 업데이트되는 UI를 가지고있다. 그러나 그것은 수렁에 빠져있는 것처럼 보입니다. AsyncTask
을 조금 더 빨리 사용하려면 어떻게해야합니까? 여기진행 막대를 업데이트하기 위해 AsyncTask를 설정하는 방법은 무엇입니까?
class Looper extends BaseIOIOLooper {
/**
* Called every time a connection with IOIO has been established.
* Typically used to open pins.
*
* @throws ConnectionLostException
* When IOIO connection is lost.
*
* @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#setup()
*/
@Override
protected void setup() throws ConnectionLostException {
led_ = ioio_.openDigitalOutput(0, true);
DO1 = ioio_.openDigitalOutput(6, false);
DO2 = ioio_.openDigitalOutput(7, false);
DO3 = ioio_.openDigitalOutput(8, false);
DO4 = ioio_.openDigitalOutput(9, false);
DO5 = ioio_.openDigitalOutput(10, false);
DO6 = ioio_.openDigitalOutput(11, false);
DO7 = ioio_.openDigitalOutput(12, false);
DO8 = ioio_.openDigitalOutput(13, false);
DO9 = ioio_.openDigitalOutput(14, false);
DO10 = ioio_.openDigitalOutput(15, false);
DO11 = ioio_.openDigitalOutput(16, false);
DO12 = ioio_.openDigitalOutput(17, false);
DI1 = ioio_.openDigitalInput(18);
DI2 = ioio_.openDigitalInput(19);
DI3 = ioio_.openDigitalInput(20);
DI4 = ioio_.openDigitalInput(21);
DI5 = ioio_.openDigitalInput(22);
DI6 = ioio_.openDigitalInput(23);
DI7 = ioio_.openDigitalInput(24);
DI8 = ioio_.openDigitalInput(25);
DI9 = ioio_.openDigitalInput(26);
AI1 = ioio_.openAnalogInput(31);
AI2 = ioio_.openAnalogInput(32);
AI3 = ioio_.openAnalogInput(33);
AI4 = ioio_.openAnalogInput(34);
AI5 = ioio_.openAnalogInput(35);
AI6 = ioio_.openAnalogInput(36);
AI7 = ioio_.openAnalogInput(37);
AI8 = ioio_.openAnalogInput(38);
AI9 = ioio_.openAnalogInput(39);
AI10 = ioio_.openAnalogInput(40);
AI11 = ioio_.openAnalogInput(41);
AI12 = ioio_.openAnalogInput(42);
AI13 = ioio_.openAnalogInput(43);
AI14 = ioio_.openAnalogInput(44);
AI15 = ioio_.openAnalogInput(45);
AI16 = ioio_.openAnalogInput(46);
/*
* for (int i = 0; i < DOA.length; i++) { DOA[i] =
* ioio_.openDigitalOutput(i + 6); }
*/
// for (int i = 0; i < DIA.length; i++) {
// DIA[i] = ioio_.openDigitalInput(i + 18);
// }
// for (int i = 0; i < PWMA.length; i++) {
// PWMA[i] = ioio_.openPwmOutput(i + 27, 10000);
// }
//
// for (int i = 0; i < AIA.length; i++) {
// AIA[i] = ioio_.openAnalogInput(i + 31);
// }
// TWIA[0] = ioio_.openTwiMaster(1, TwiMaster.Rate.RATE_1MHz,
// false);
// TWIA[1] = ioio_.openTwiMaster(2, TwiMaster.Rate.RATE_1MHz,
// false);
// TWIA[2] = ioio_.openTwiMaster(4, TwiMaster.Rate.RATE_1MHz,
// false);
// TWIA[3] = ioio_.openTwiMaster(5, TwiMaster.Rate.RATE_1MHz,
// false);
connStatus = true;
}
/**
* Called repetitively while the IOIO is connected.
*
* @throws ConnectionLostException
* When IOIO connection is lost.
* @throws InterruptedException
*
* @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#loop()
*/
@Override
public void loop() throws ConnectionLostException, InterruptedException {
led_.write(false);
DO1.write(currentDigFrag.digitalIO0Power.isChecked());
DO2.write(currentDigFrag.digitalIO1Power.isChecked());
DO3.write(currentDigFrag.digitalIO2Power.isChecked());
DO4.write(currentDigFrag.digitalIO3Power.isChecked());
DO5.write(currentDigFrag.digitalIO4Power.isChecked());
DO6.write(currentDigFrag.digitalIO5Power.isChecked());
DO7.write(currentDigFrag.digitalIO6Power.isChecked());
DO8.write(currentDigFrag.digitalIO7Power.isChecked());
DO9.write(currentDigFrag.digitalIO8Power.isChecked());
DO10.write(currentDigFrag.digitalIO9Power.isChecked());
DO11.write(currentDigFrag.digitalIO10Power.isChecked());
DO12.write(currentDigFrag.digitalIO11Power.isChecked());
UITask
currentDigFrag.updateDigitalInput(1, !DI1.read());
currentDigFrag.updateDigitalInput(2, !DI2.read());
currentDigFrag.updateDigitalInput(3, !DI3.read());
currentDigFrag.updateDigitalInput(4, !DI4.read());
currentDigFrag.updateDigitalInput(5, !DI5.read());
currentDigFrag.updateDigitalInput(6, !DI6.read());
currentDigFrag.updateDigitalInput(7, !DI7.read());
currentDigFrag.updateDigitalInput(8, !DI8.read());
currentDigFrag.updateDigitalInput(9, !DI8.read());
currentAnFrag.updateAnalogInput(1,AI1.getVoltage());
currentAnFrag.updateAnalogInput(2,AI2.getVoltage());
currentAnFrag.updateAnalogInput(3,AI3.getVoltage());
currentAnFrag.updateAnalogInput(4,AI4.getVoltage());
currentAnFrag.updateAnalogInput(5,AI5.getVoltage());
currentAnFrag.updateAnalogInput(6,AI6.getVoltage());
currentAnFrag.updateAnalogInput(7,AI7.getVoltage());
currentAnFrag.updateAnalogInput(8,AI8.getVoltage());
currentAnFrag.updateAnalogInput(9,AI9.getVoltage());
currentAnFrag.updateAnalogInput(10,AI10.getVoltage());
currentAnFrag.updateAnalogInput(11,AI11.getVoltage());
currentAnFrag.updateAnalogInput(12,AI12.getVoltage());
currentAnFrag.updateAnalogInput(13,AI13.getVoltage());
currentAnFrag.updateAnalogInput(14,AI14.getVoltage());
currentAnFrag.updateAnalogInput(15,AI15.getVoltage());
currentAnFrag.updateAnalogInput(16,AI16.getVoltage());
}
}
그리고 내가 지금까지 AsyncTask
로 구현 한 것입니다 : 여기
private class UIAsyncTask extends AsyncTask<analogFragment, Float, Void> {
@Override
protected Void doInBackground(analogFragment... params) {
//What do I do in here???
return null;
}
}
참고 : 두 클래스 모두 내부 클래스입니다.
참고 : currentDigFrag
및 currentAnFrag
은보기가 포함 된 현재 Fragment
입니다. 특히이 ProgressBar
전망
여기에 결과없이, 나는 무엇을 시도했다입니다 :
private class AnalogUpdater extends AsyncTask<AnalogInput, Void, Void> {
// A callback method executed on non UI thread, invoked after
// onPreExecute method if exists
// Takes a set of parameters of the type defined in your class
// implementation. This method will be
// executed on the background thread, so it must not attempt to interact
// with UI objects.
@Override
protected Void doInBackground(AnalogInput... params) {
try {
currentAnFrag.updateAnalogInput(1, AI1.getVoltage());
currentAnFrag.updateAnalogInput(2, AI2.getVoltage());
currentAnFrag.updateAnalogInput(3, AI3.getVoltage());
currentAnFrag.updateAnalogInput(4, AI4.getVoltage());
currentAnFrag.updateAnalogInput(5, AI5.getVoltage());
currentAnFrag.updateAnalogInput(6, AI6.getVoltage());
currentAnFrag.updateAnalogInput(7, AI7.getVoltage());
currentAnFrag.updateAnalogInput(8, AI8.getVoltage());
currentAnFrag.updateAnalogInput(9, AI9.getVoltage());
currentAnFrag.updateAnalogInput(10, AI10.getVoltage());
currentAnFrag.updateAnalogInput(11, AI11.getVoltage());
currentAnFrag.updateAnalogInput(12, AI12.getVoltage());
currentAnFrag.updateAnalogInput(13, AI13.getVoltage());
currentAnFrag.updateAnalogInput(14, AI14.getVoltage());
currentAnFrag.updateAnalogInput(15, AI15.getVoltage());
currentAnFrag.updateAnalogInput(16, AI16.getVoltage());
} catch (ConnectionLostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
// A callback method executed on UI thread, invoked by the
// publishProgress()
// from doInBackground() method
// Overrider this handler to post interim updates to the UI thread. This
// handler receives the set of parameters
// passed in publishProgress from within doInbackground.
}
}
우리가 그것을 처리하기 위해 "어떻게"를 선택하기 전에의이 더 먼저 문제를 이해하자 읽을 수있다. 설치 메서드를 호출하게하는 트리거는 무엇입니까 (반복적입니까?)? 설치 호출 간에는 어떤 변화가 있습니까? 모든 UI 요소가 표시 되나요? 아니면 한 번에 일부만 표시됩니까? 표시 한 코드 집합이 호출되는 컨텍스트를 설명하십시오. – ErstwhileIII
Loop() 만 반복적으로 호출됩니다. – Tukajo
currentDigFrag 및 currentAnFrag의 모든 UI 요소가 항상 표시됩니다 (응용 프로그램이 UI를 제어하는 조각이있는 다중 탭 활동입니다). – Tukajo