【问题标题】:Android: IntentService used in onDestroy()Android:onDestroy() 中使用的 IntentService
【发布时间】:2013-07-01 18:52:49
【问题描述】:

一旦用户退出应用程序,我正在尝试删除数据库中的特定注册表。对于那个问题,我调用了一个 IntentService,它在应用程序 ID 被破坏时理论上运行。问题是,尽管此意图没有按预期工作并且注册表没有被删除。如果您可以提供帮助,这是代码。 意图服务:

public class FinIntentService extends IntentService{
    String levelstring = "22";
    int pid;
    static String pids;
    BroadcastReceiver batteryReceiver = null;
    String url = "10.0.0.13";
    private static String url_crear = "http://10.0.0.13/subida/create_candidato.php";
    private static final String url_delete = "http://10.0.0.13/subida/delete_candidato.php";
    JSONParser jsonParser = new JSONParser();

    @SuppressLint("NewApi")
    static String device_id = Build.SERIAL;
    static String PDA = device_id.substring(device_id.length() - 6);


            public FinIntentService() {
                    super("FinIntentService");
                }

            @Override
            protected void onHandleIntent(Intent intent)
            {

               int success;



                    try {


                        List<NameValuePair> params = new ArrayList<NameValuePair>();
                        params.add(new BasicNameValuePair("id", Titulacion.getPID()));


                        JSONObject json = jsonParser.makeHttpRequest(
                                url_delete, "POST", params);


                        Log.d("Delete Product", json.toString());

                        success = json.getInt("success");

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
            }



        }

例如日志没有到达

主要活动:

public void onDestroy(){
    super.onDestroy();
    Intent msgIntent = new Intent(Titulacion.this, FinIntentService.class);
    startService(msgIntent);

}

我之前尝试过使用 Asynctask,但是在 onDestroy 时无法获得想要的效果。然而,在某些情况下(30 个中有 1 个)synctask 完成了它的任务。

【问题讨论】:

  • 只是猜测......也许应用程序在意图可以服务之前就被破坏了?
  • 是的,我想是的,但是有解决办法吗?
  • 为什么要做intentservice来删除ddbb中的注册表?为什么不直接删除呢?并且:为什么在启动应用程序时不删除它?
  • 好吧,一种粗略的处理方法是在 onDestroy 中调用 Thread.sleep(X) 以让您的任务完成您的工作并阻止 onDestroy 持续 X 秒。或者调用 yourthread.join(X) 来等待你的线程结束。

标签: android intentservice


【解决方案1】:

其实onDestroy方法是不能调用的。

onDestroy 仅在系统资源不足(内存、cpu 时间等)并决定终止您的活动/应用程序或有人对您的活动调用完成()时调用。

如果你想释放一些资源,你应该这样做 onPause() 而不是。

【讨论】:

  • 当你按下返回按钮时,onDestroy() 会被即时调用。
  • @VittorioJimmyCozzolino,这就是为什么我说“实际上无法调用 onDestroy 方法”。 :)
  • 您好,感谢您的解释,但如果我在用户进入下一个活动时执行 onPause(),intentService 将执行其任务,我假设。
  • @Katherine99 以及为什么在没有任何服务的情况下不删除 onpause 中的数据
  • 据我所知,onpause 并不能解决问题。如果我开始另一个活动,我不想删除数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
相关资源
最近更新 更多