Метод onHandleIntent запускается только один раз в классе ServiceIntent [Android] - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь вызвать API для каждой 1 секунды в методе onHandleIntent класса ServiceIntent в Android.

onHandleIntent выполняется только один раз. Я хочу запускать этот метод каждую секунду.

FancyBookMakingService.class

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {

            if (intent != null) {
                try {
                    Thread.sleep(1000);

                    String result = getApi(URL); //API calling
                    Intent intentFBM = new Intent(DataHolder.ACTION_SEND_DATA);
                    intentFBM.putExtra("key", result);
                    sendBroadcast(intentFBM);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

    }

BroadcastReceiver

У меня есть два класса ServiceIntent, первый работает нормально, другой нет, а BroadcastReceiverSignalr - это внутренний класс

public class BroadcastReceiverSignalr extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if (action.equalsIgnoreCase(DataHolder.ACTION_SEND_ACTIVE)) {
                String result = intent.getStringExtra(DataHolder.keySIGNALR);
                Log.i("TAG",result);

            }else if (action.equalsIgnoreCase(DataHolder.ACTION_SEND_DATA)){
                String data = intent.getStringExtra("key");
                Log.i("TAG",data);
            }
        }
    }

AndroidMainfest.xml

<service android:name=".FancyBookMakingService" />

1 Ответ

0 голосов
/ 08 мая 2018

Используйте класс обслуживания вместо IntentService и используйте таймер, например

открытый класс MainActivity расширяет AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startService(new Intent(this,Service.class)); //start service which is Service.java
}

}

и ваш класс обслуживания выглядит как rhis

public class Service extends Service {

public static final int notify = 300000;  //interval between two services(Here Service run every 5 Minute)
private Handler mHandler = new Handler();   //run on another Thread to avoid crash
private Timer mTimer = null;    //timer handling

@Override
public IBinder onBind(Intent intent) {
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public void onCreate() {
    if (mTimer != null) // Cancel if already existed
        mTimer.cancel();
    else
        mTimer = new Timer();   //recreate new
    mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);   //Schedule task
}

@Override
public void onDestroy() {
    super.onDestroy();
    mTimer.cancel();    //For Cancel Timer
    Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show();
}

//class TimeDisplay for handling task
class TimeDisplay extends TimerTask {
    @Override
    public void run() {
        // run on another thread
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                // display toast
                Log.d("service is ","running");
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...