0
我想保持AsyncTask全天候運行。它從互聯網下載一些信息,然後將其發送給相關人員。發送短信後,如果有新的信息可用,請再次檢查。我的手機有足夠的內存可用來運行我的應用程序。我發現在3-5小時內停止應用程序。經過漫長的觀察,我發現如果有任何其他應用程序,例如WhatsApp收到或發送任何消息,則我的應用程序停止工作。但這並非每次都發生。當任何其他應用與互聯網通信時,我的應用停止非常罕見。有時候我認爲我沒有正確地判斷爲什麼應用程序停止。它停止時不會產生任何錯誤。看起來,應用程序簡單地完成了自己的任務並自行關閉。這是我的代碼,我是如何做到這一點的。請幫我弄清楚這個問題。如果任何其他應用程序與互聯網通信,則應用程序停止工作
Timer SMSTimer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SMSTimer = new Timer();
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
if (runNewTask){
new RequestTask().execute(BaseUrl);
runNewTask =false;
}
}
});
}
}, 0, 5000);
}
public class RequestTask extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... url) {
try {
// constants
int timeoutSocket = 30000;
int timeoutConnection = 30000;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet httpget = new HttpGet(url[0]);
HttpResponse getResponse = client.execute(httpget);
getResponse.addHeader("Cache-Control:", "no-cache");
final int statusCode = getResponse.getStatusLine().getStatusCode();
if(statusCode != HttpStatus.SC_OK) {
Log.w("MyApp", "Download Error: " + statusCode + "| for URL: " + url);
return null;
}
String line = "";
StringBuilder total = new StringBuilder();
HttpEntity getResponseEntity = getResponse.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(getResponseEntity.getContent()));
while((line = reader.readLine()) != null) {
total.append(line);
total.append("\n");
}
line = total.toString();
return line;
} catch (Exception e) {
return null;
}
return null;
}
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(String result) {
try {
if(result != null) {
CreatMsg(result);
}
runNewTask = true;
} catch(NullPointerException e) {
runNewTask = true;
}
}
}
?當然你應該使用服務?也是一個啓動器以及重新啓動後重新啓動你的任務? – jamesc
從AsyncTask文檔:AsyncTasks理想情況下應該用於短操作(最多幾秒鐘)。如果您需要保持線程長時間運行,強烈建議您使用java提供的各種API。 util.concurrent pacakge,如Executor,ThreadPoolExecutor和FutureTask。 – todd
我不知道你剛剛說的話。如果您請提供我鏈接到任何教程? – user934820