如何从android上每隔10秒检查一次php服务器上的数据库?

如何从android上每隔10秒检查一次php服务器上的数据库?,android,Android,我正在构建一个应用程序,它将重复向服务器发出请求,我希望此任务在后台运行,这样即使用户关闭了应用程序,它也不会停止。我的意思是,我想要像SocialMedia应用程序为其通知系统所做的那样 这就是我一直在尝试的。。。。应用程序将停止工作。。。我在这个代码中做错了什么 public class MyService extends Service{ private boolean isRunning = false; @Override public void onC

我正在构建一个应用程序,它将重复向服务器发出请求,我希望此任务在后台运行,这样即使用户关闭了应用程序,它也不会停止。我的意思是,我想要像SocialMedia应用程序为其通知系统所做的那样

这就是我一直在尝试的。。。。应用程序将停止工作。。。我在这个代码中做错了什么

public class MyService extends Service{


    private boolean isRunning  = false;

    @Override
    public void onCreate() {
        Toast.makeText(this, "Service onCreate", Toast.LENGTH_SHORT).show();
        isRunning = true;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "Service onStartCommand", Toast.LENGTH_SHORT).show();
        // Creating new thread for my service
        // Always write your long running tasks in a separate thread, to avoid ANR
        new Thread(new Runnable() {
            @Override
            public void run() {
                httpRequest();
                if(isRunning){}
            }
        }).start();
        return Service.START_STICKY;
    }

    public void httpRequest(){
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://mydomain/getData.php");

        try {           
            String MyName = "Muhammad Sappe";

            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("action", MyName));

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request

        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String response = httpclient.execute(httppost, responseHandler);

        //This is the response from a php application
        String reverseString = response;
        Toast.makeText(this, "result : "+reverseString, Toast.LENGTH_SHORT).show();

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public void onDestroy() {
        isRunning = false;
    } 
}
公共类MyService扩展服务{
私有布尔值isRunning=false;
@凌驾
public void onCreate(){
Toast.makeText(这是“服务onCreate”,Toast.LENGTH_SHORT).show();
isRunning=true;
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
Toast.makeText(这是“服务启动命令”,Toast.LENGTH_SHORT).show();
//为我的服务创建新线程
//始终在单独的线程中编写长时间运行的任务,以避免出现错误
新线程(newrunnable()){
@凌驾
公开募捐{
httpRequest();
如果(正在运行){}
}
}).start();
return Service.START\u STICKY;
}
公共无效httpRequest(){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://mydomain/getData.php");
试试{
字符串MyName=“Muhammad Sappe”;
//添加您的数据
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“action”,MyName));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
ResponseHandler ResponseHandler=新BasicResponseHandler();
String response=httpclient.execute(httppost,responseHandler);
//这是来自php应用程序的响应
字符串反向限制=响应;
Toast.makeText(这个,“结果:+反向限制,Toast.LENGTH_SHORT).show();
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
}捕获(IOE异常){
//TODO自动生成的捕捉块
}
}
@凌驾
公共IBinder onBind(意图arg0){
返回null;
}
@凌驾
公共空间{
isRunning=false;
} 
}
您可以编写服务 文档链接:

并让该服务反复轮询服务器,但这种方法特别糟糕,会消耗不必要的电池

您可以通过另一种方式实现通知,即推送通知(GCM) 文档链接: 然后,在收到通知后,您可以在应用程序中轮询您的服务器

你应该检查一下。GCM可能是您正在寻找的

如果您想手动实现它。你可以用


希望这有帮助:)

应用程序中的同步适配器组件封装了用于在设备和服务器之间传输数据的任务的代码。根据您在应用程序中提供的计划和触发器,同步适配器框架将运行同步适配器组件中的代码。这是你必须检查的正确文件

可能重复您正在使用的线程,该线程在不等待连接或响应到来的情况下保持运行,这可能是一个问题。尝试使用aync任务并等待响应