【发布时间】:2014-07-22 08:21:35
【问题描述】:
我正在像这样在Service 内制作 AsynkTask
public class MyService extends Service {
private final IBinder mBinder = new LocalBinder();
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v("log_tag", "Service started");
ReceiveAsyncTask receiveATask = new ReceiveAsyncTask();
receiveATask.execute();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
Log.v("log_tag", "onBind");
return mBinder;
}
public class LocalBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
class ReceiveAsyncTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
taskDummy();
return null;
}
@Override
protected void onPreExecute() {
Log.v("log_tag", "onPreExecute");
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
Log.v("log_tag", "onPostExecute");
super.onPostExecute(result);
}
@Override
protected void onCancelled() {
Log.v("log_tag", "onPostExecute");
super.onCancelled();
}
}
private void taskDummy() {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v("log_tag", "taskDummy");
}
}
/** method for clients */
public int getRandomNumber() {
Log.v("log_tag", "inner Method called");
return 100;
}
}
当我运行应用程序时,它开始按预期每两秒打印一次“taskDummy”,当我通过 prsing Back buttin 关闭应用程序时,日志打印仍按预期继续,但是当我从最近的应用程序堆栈中删除应用程序时,它停止打印这不应该发生我希望我的异步任务在这种情况下继续。甚至我可以看到我的服务正在从设置中运行。请给我建议。
【问题讨论】:
-
while (true) {怎么会被终止? -
尝试通过 onStartCommand 将 doInBackgroud 代码放入服务中,而不是使用异步任务
-
@blackbelt 是的,我不想终止。
-
@vipul mittal 我正在做网络操作,所以我正在使用异步任务
-
@jignesh 您也可以在服务内部进行。在活动的情况下,您无法在 UI 线程上执行网络操作,但服务本身是不同的线程。我相信直接进行网络操作是服务没问题的。
标签: android android-asynctask android-service