【问题标题】:Sending http request in android in app's onStop在应用程序的 onStop 中在 android 中发送 http 请求
【发布时间】:2015-11-24 12:02:49
【问题描述】:

我有一些统计数据需要从我的 Android 4.2+ 应用程序发送到我的服务器并等待响应。事实上,有些用户只运行一次,所以要从他们那里获取数据,我需要在主要活动的 onStop 中发送它。

据我所知,请求必须是同步的:如果我在这里创建 http 工作线程,android 将在 http 请求执行之前进一步运行并关闭应用程序。 假设只能进行一次发布,我不能指望在下次发布时检查数据。 我什至想过在 onStop 中启动服务(以确保在应用停止后执行代码)来处理这个请求,但它看起来很难看。

你是怎么做这些事情的?

【问题讨论】:

    标签: java android httprequest


    【解决方案1】:

    我建议使用 IntentService 或WakeFullIntentService,您可以在 onStop 中触发您的工作。

    如果我在这里创建 http 工作线程,android 将在执行 http 请求之前进一步运行并关闭应用程序。

    不,android 不会立即杀死你的应用进程,你可以启动服务,它会完成它的工作。系统实际上可能会杀死您的应用程序,但您必须立即打开其他重型应用程序 - 例如相机/等。

    为避免您可以通过添加通知将服务置于前台

    【讨论】:

    • 奇怪,但是设置单次启动警报不起作用,而 WakefulIntentService.sendWakefulWork(MainContext, SaveStatService.class) 在应用程序关闭几秒钟后启动了我的服务(正是我试图做的与警报管理器)。
    • 忘记将接收器添加到清单中,这就是警报不起作用的原因
    【解决方案2】:
    You can override your onBackPress method and make http request from here by using Async task and in onPostexecute() method call finish() to close activity.
    
    //Something like this
    
    @Override
        public void onBackPressed() {
            new AsyncTask<Void , Void , Void>(){
    
                @Override
                protected Void doInBackground(Void... params) {
                    //make request
                    return null;
                }
    
                @Override
                protected void onPostExecute(Void aVoid) {
                    super.onPostExecute(aVoid);
                   // on completion 
                            finish();
                }
            };
    
    
        }
    

    【讨论】:

    • 不,用户可以到主屏幕离开应用程序,一段时间后系统会终止我的应用程序,因此根本无法按下 BACK 按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2012-09-09
    相关资源
    最近更新 更多