如果网络不可用,我的Android应用程序会在5到10分钟内在后台被杀。
App经常在后台调用一些休息服务。
我的logcat中没有任何异常。
但当我回到前台时,我的应用程序从开始就开始,因为它被操作系统杀死了。
请建议我可能是什么原因,我该怎么做才能阻止它。
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();
}
}
谢谢
答案 0 :(得分:1)
如果网络不可用,我的Android应用程序会在5到10分钟内在后台被杀死
当您的应用没有任何forground Activity
或forground Service
实例时,就会发生这种情况。
这也取决于你在后台使用多少内存 - 如果消耗大量内存,操作系统会将你的应用程序置于高优先级,首先被“杀死”。
此Google IO视频详细说明了在这种情况下您的应用何时被杀 - http://www.youtube.com/watch?v=gbQb1PVjfqM&list=PL4C6BCDE45E05F49E&index=10&feature=plpp_video
在视频中间讨论这个问题的时间是两三分钟
App经常在后台调用一些休息服务
如果你没有从android Service
类调用REST方法 - 你应该这样做,因为正如我所说的 - 如果没有Activity forground或没有forground Service,操作系统会很快杀死你的进程正在运行,
我必须说在后台进行长时间网络操作的运行后台服务 - 无论如何都是一个坏主意:它会消耗大量电池,还会消耗3G带宽。用户将意识到它耗尽电池后会非常快速地删除你的应用。所以你应该在背景中做太多的小事