Android数据按固定时间间隔上传

时间:2016-04-06 05:34:00

标签: android

我有一个Android应用程序,它使用当前按钮点击启动的异步任务(P,Q,R)将数据上传到Web服务。我有三个表(A,B,C)的数据。目前我在第一个异步任务(P)的doInBackground中上传表A数据,我在第一个异步任务(P)的onPostExecute中调用第二个异步任务(Q)。在onPostExecute中,我用返回的数据更新我的本地表并给出一些UI消息同样。虽然该功能已存在,但现在我想以固定的时间间隔(每30分钟)上传数据,即使应用程序已关闭。当设备启动/安装应用程序/更新应用程序时,应启动此过程。在上传数据时,如果用户打开应用程序,则应禁用上载按钮。我不一定需要长时间运行的长时间运行任务。 1.我是否需要使用服务而不是异步任务? 并就此提出建议。

2 个答案:

答案 0 :(得分:1)

  

要上传数据,请执行以下操作

我认为你对Android很新,而不是 Asynctasks我认为你应该转向凌空或改造,与Asynctask相比,这非常容易和非常快

  

我是否需要使用服务而不是异步任务

由于您需要每30分钟上传一次数据,我建议您将代码移至要上传数据的服务。此外,由于服务使用,当应用程序关闭时它也会起作用,因为它在后台运行

答案 1 :(得分:0)

您的Receiver类

 import java.util.Timer;
 import java.util.TimerTask;


 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;

 public class yourReceiver extends BroadcastReceiver {

     @Override
     public void onReceive(final Context context, Intent intent) {
         int delay = 5000; // delay for 5 sec.5000
         int period = 60000; // repeat every 1min.60000

          Timer timer = new Timer();
          timer.scheduleAtFixedRate(new TimerTask() {
          public void run() {
             Intent serviceIntent = new Intent(context,UploadService.class);
             context.startService(serviceIntent);
          }
         }, delay, period);

     }
 }

您的服务类

import android.app.Service;  
import android.content.Intent;  
import android.media.MediaPlayer;  
import android.os.IBinder;  
import android.widget.Toast;  
public class UploadService extends Service {  
 MediaPlayer myPlayer;  
 @Override  
 public IBinder onBind(Intent intent) {  
  return null;  
 }  
 @Override  
 public void onCreate() {  
  Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();  

  myPlayer = MediaPlayer.create(this, R.raw.sun);  
  myPlayer.setLooping(false); // Set looping  
 }  
 @Override  
 public void onStart(Intent intent, int startid) {  
  Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();  
  serviceThread = new ServiceThread();
  serviceThread.start();  
 }  
 @Override  
 public void onDestroy() {  
  Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();  
  myPlayer.stop();  
 }  

    private class ServiceThread extends Thread {
    @Override
    public void run() {
        synchronized(UploadService.class){
            if(uploadStatus) {
                uploadStatus = false;
                uploadData();
                uploadStatus =true;
            }
        }


    }   
}
}