Android ProgressBar干扰GCM注册

时间:2014-01-16 15:03:38

标签: android android-asynctask google-cloud-messaging

我正在编写一个使用Google Cloud Messaging的应用。该应用程序可以注册新的注册ID,没有任何问题。但是,如果我在注册期间显示不确定的ProgressBar,则注册将失败,并显示错误SERVICE_NOT_AVAILABLE。在失败之前,该应用程序在尝试注册时也需要明显更长的时间。

ProgressBar在主要活动的布局中声明:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ActivityLogin" >

<TextView android:id="@+id/hello_world" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<ProgressBar
android:id="@+id/progressBarMain"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone" />

</RelativeLayout>

ProgressBar会在开始注册前立即显示:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

...

        if (reg.isEmpty())
        {
            progressBarMain.setVisibility(View.VISIBLE);
            reg.registerInBackground(context, this);
        }
    }
}

registerInBackground()运行一个AsyncTask,它进行GCM调用并将结果返回给此回调:

public void completeRegistration(RegistrationResult result)
{
    if (result.success == true)
    {
        textHelloWorld.append("Registered new ID: " + result.registrationId);
    }
    else
    {
        textHelloWorld.append("Failed to register new ID. Reason: " + getString(result.messageId));
    }
    progressBarMain.setVisibility(View.GONE);
}

简单地评论两个progressBarMain.setVisibility()调用可以让整个事情顺利运行,但只要它们被包括在内就不可能进行注册。

我在运行2.3.3的真实设备和运行4.4的模拟器上测试了这个。两者都显示相同的行为。我也尝试使用THREAD_POOL_EXECUTOR运行AsyncTask,但这没有任何区别。

0 个答案:

没有答案