Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果网络不可用,Android应用程序在后台被杀死_Android - Fatal编程技术网

如果网络不可用,Android应用程序在后台被杀死

如果网络不可用,Android应用程序在后台被杀死,android,Android,如果网络不可用,我的android应用程序在5到10分钟内就在后台死掉了 应用程序在后台不断调用一些rest服务 我的日志没有任何异常 但当我回到前台时,我的应用程序从一开始就启动了,因为它被操作系统杀死了 请告诉我可能的原因以及我应该如何预防 public void sendHttpPost() throws ClientProtocolException, IOException{ HttpPost httpPostRequest = new HttpPost(url + b

如果网络不可用,我的android应用程序在5到10分钟内就在后台死掉了

应用程序在后台不断调用一些rest服务

我的日志没有任何异常

但当我回到前台时,我的应用程序从一开始就启动了,因为它被操作系统杀死了

请告诉我可能的原因以及我应该如何预防

public void sendHttpPost() throws ClientProtocolException, IOException{
        HttpPost httpPostRequest = new HttpPost(url + buildParams());

        // add headers
        HttpParams httpParams = new BasicHttpParams();
        Iterator it = headers.entrySet().iterator();
        Iterator itP = params.entrySet().iterator();
        while (it.hasNext()) {
            Entry header = (Entry) it.next();
            httpPostRequest.addHeader((String)header.getKey(), (String)header.getValue());
        }
        while(itP.hasNext())
        {
            Entry header = (Entry) itP.next();
            StringEntity se = new StringEntity((String) header.getValue());
            httpPostRequest.setEntity(se);
        }
        HttpConnectionParams.setConnectionTimeout(httpParams, 30000);
        HttpConnectionParams.setSoTimeout(httpParams, 30000);
        httpPostRequest.setParams(httpParams);
        HttpClient client = new DefaultHttpClient();
        HttpResponse resp;

        resp = client.execute(httpPostRequest);

        this.respCode = resp.getStatusLine().getStatusCode();
    //  Log.i(TAG, "response code: " + getResponseCode());
        this.responsePhrase = resp.getStatusLine().getReasonPhrase();
    //  Log.i(TAG, "error msg: " + getErrorMsg());
        HttpEntity entity = resp.getEntity();

        if (entity != null){
            InputStream is = entity.getContent();
            //Header contentEncoding = resp.getFirstHeader("Content-encoding");
            //Log.i(TAG, "endoding" + contentEncoding.getValue());
            response = convertStreamToString(is);
            //response = response.substring(1,response.length()-1);
            //response = "{" + response + "}";
    //      Log.i(TAG, "response: " + response);
            screen.update("Login", response, false);
            is.close();
        }
    }
这是一种即使网络不可用也能与服务器交互的方法

下面是线程调用rest服务的代码

如何对服务执行相同操作:

public void start()
    {
        try{

            if(_exit)
                return;      
            //_lastExecute = System.currentTimeMillis();
            _try++;
        //  Log.i("-----HK Requests--------- \n\r", _url);
            final String response = HttpConnector.callWebService(_url, _data, _listener, _token);

            CallBackThread ct = new CallBackThread(_action, response, autocallreq);
            ct.start();         
//          while(ct.isAlive())
//          {
//              Thread.sleep(500);  
//          }
        }        

        catch(Exception e)
        {
            System.out.print("error="+e.getMessage());
            Helper.LogException(this, e);
            //CallBackThread ct = new CallBackThread(_action, "", autocallreq);
            //ct.start();
        }
    }
谢谢

如果网络不可用,我的android应用程序在5到10分钟内就在后台死掉了

当你的应用程序没有任何forground
活动
或forground
服务
实例时,就会发生这种情况。 这还取决于你的应用程序在后台消耗了多少内存——如果你的应用程序消耗了大量内存,操作系统会将你的应用程序置于高优先级,让它先被“杀死”

这段谷歌IO视频详细解释了在这种情况下,你的应用程序何时可能会被杀死-

这是在视频

中讨论这两个问题的两到三分钟。 应用程序在后台不断调用一些rest服务

如果您没有从android
Service
class调用REST方法,那么您应该这样做,因为正如我所说的,如果没有放弃活动或没有运行放弃服务,操作系统将非常快地终止您的进程


我必须说,在后台运行长时间的网络操作的后台服务是一个坏主意:它将消耗大量电池和3G带宽。用户会在意识到你的应用耗尽电池后很快删除你的应用。所以你应该小心不要在后台做太多的事情

如果有网络,你会尝试通过网络发送东西吗?然后检查您的应用程序是否在网络不可用的情况下尝试发送…请共享一些代码,以便我们能够理解您的问题到底是什么您所说的背景是什么意思?是否在服务或线程对象中运行代码?是,它尝试调用与内存相关的rest服务方法。可能是内存不足。@Ankit HTech:所以我是对的,您没有使用服务类。我建议你按照我在回答中说的去做,谢谢你的建议,但如何做到这一点我是android新手,请告诉我me@AnkitHTech:那么现在在你更新了这个问题之后,你会问一个完全不同的问题:“如何使用android服务类”。你可以从这些例子中学习。同时,android开发者指南也非常详细地讨论了如何使用android服务。我不打算在这里写下您的类应该如何具体实现,我建议您花一些时间确切地了解所有的服务好处和用例。服务是整个API的三个主要构建块之一—您应该认真对待它