【问题标题】:Android service asynctaskAndroid服务异步任务
【发布时间】:2014-08-06 11:58:44
【问题描述】:

我目前正在使用一个启动服务的片段。该服务使用 asynctask 与服务器建立连接。我想在应用程序连接到服务器时显示进度对话框。问题是尝试传递对话框的应用程序上下文,我得到一个令牌错误。

我认为我需要我的活动上下文,但我不知道如何将它传递给服务,以便它可以使用它将它传递给异步任务。连接是在服务的onCreate()方法上实现的。

日志猫:

08-06 12:58:01.696: E/AndroidRuntime(16733): java.lang.RuntimeException: Unable to     create service com.homedcs.pushservice.PushAlarm:    android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for   an application
08-06 12:58:01.696: E/AndroidRuntime(16733):    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2564)
08-06 12:58:01.696: E/AndroidRuntime(16733):    at android.app.ActivityThread.access$1600(ActivityThread.java:181)
08-06 12:58:01.696: E/AndroidRuntime(16733):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1414)
08-06 12:58:01.696: E/AndroidRuntime(16733):    at android.os.Handler.dispatchMessage(Handler.java:99)

服务:

@Override
public void onCreate() {

    if(connection == null){
        try {
            connection = new PushConnection(getApplicationContext()).execute().get();
        } catch (InterruptedException | ExecutionException e2) {
            e2.printStackTrace();
        }
    }

异步任务:

public PushConnection(Context context) {
    this.context = context;

}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    dialog = new ProgressDialog(context);
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    dialog.show();

}

【问题讨论】:

  • 我希望你不要在 DoINBacground 中使用 UI
  • 贴一些代码和logcat
  • asynctask 有自己的进度对话框.. 显示你的 logcat
  • 你有一个服务,你想将一个上下文从 Activity 传递到服务?好吧ServiceContext
  • 服务是一个上下文,好吧,我试过从服务中传递“this”,还是不行。

标签: android android-activity service android-asynctask android-context


【解决方案1】:

当您在后台调用 do 时,第二个线程启动并在进度启动时使用进度条自定义。

试试{

 connection = new PushConnection(className.this).execute().get();

 } catch (InterruptedException | ExecutionException e2) {

        e2.printStackTrace();
  }
}

只需将 getAppliactionContext 更改为 Class ref。用这个给我回复

【讨论】:

    【解决方案2】:

    您正在从服务启动 Asynctask,因此将服务对象而不是 applicationcontext 作为service 作为上下文发送。

    【讨论】:

    • 08-06 14:15:11.450: E/AndroidRuntime(17660): java.lang.RuntimeException: 无法创建服务 com.homedcs.​​pushservice.PushAlarm: android.view.WindowManager$BadTokenException:无法添加窗口——令牌 null 不适用于应用程序
    • 如果您使用的是不在前台的活动上下文,您将收到 BadTokenException 异常,因此最好使用 service.this 作为上下文
    • 好吧,那可能是因为你的活动不在前台吧??
    • 活动在前台,有一个显示页面适配器的片段。
    【解决方案3】:

    避免 porgress 对话框。这是查看页面的最佳方法。

    https://plus.google.com/+RomanNurik/posts/eSCfnyTzFUx

    【讨论】:

      猜你喜欢
      • 2016-11-23
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多