>source

앱에서 30 초마다 (서비스로) URL을 백그라운드에서로드하고 싶습니다. 레이아웃이 없으므로 서비스 클래스에 url을로드해야하므로 webview가 적합하지 않습니다. 앱을 닫을 때에도 백그라운드에서 URL을로드하려면 무엇을 사용해야합니까?

MyService.java 클래스

public class MyService extends Service {
Activity activity ;
Handler handler = new Handler();
Runnable runnable;
int delay = 7*1000;
public MyService(Activity activity){
    this.activity = activity ;
}
@Override
public IBinder onBind(Intent intent) {
    return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    handler.postDelayed( runnable = new Runnable() {
        public void run() {
            loadURL();
            handler.postDelayed(runnable, delay);
        }
    }, delay);
    return START_STICKY ;
}
@Override
public void onDestroy() {
}
public void loadURL(){
    try{
        String id = activity.getIntent().getStringExtra("ID");
        URL url = new URL("http://localhost/att.php?id=" + id + "&status=&submit=Insert");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("GET");
    } catch (Exception e){
        Toast.makeText(this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

}


  • 답변 # 1

    새로운 WorkManager를 사용할 수 있습니다.

    기본적으로 다음 중 하나에서 확장되는 Worker 클래스를 만듭니다.

    작업자 코 루틴 RxWorker ListenableWorker

    그러면 다음과 같이 선언합니다 :

    val mWorker = PeriodicWorkRequestBuilder<Worker>(15, TimeUnit.MINUTES)
                .addTag(WORK_TAG)
                .setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
                .build()
    
    

    작업 관리자가 동일한 작업을 더 이상 시작하지 않도록 고유 한 작업을 대기열에 넣습니다.

     WorkManager.getInstance(context)
                .enqueueUniquePeriodicWork(WORK_TAG, ExistingPeriodicWorkPolicy.KEEP, locationWorker)
    
    

    Worker 클래스를 ListenableWorker와 같이 확장 할 때 코드를 사용하면 startWork () 함수를 대체하고 본문에서 다음을 실행합니다.

    handler.postDelayed( runnable = new Runnable() {
            public void run() {
                loadURL();
                handler.postDelayed(runnable, delay);
            }
        }, delay);
    
    

  • 이전 node.js - 문자열에 변수를 어떻게 입력 할 수 있습니까? 일부 텍스트 사이?
  • 다음 htaccess에서 와일드 카드 리디렉션