0

想象一下,我有以下代码作为 android 应用程序的后台处理器运行:

public class Background extends Service 
{
    public void popup (String message, int duration)
    {
        Toast.makeText(this, message, duration).show();
    }

    class BackgroundChecker extends TimerTask 
    {
        public void run()
        {
            popup("Message!", Toast.LENGTH_LONG); // here
        }
    }
}

当它到达弹出消息 ie // 这里时,Android 告诉我强制退出。我知道问题出在上下文 iethis上,但我不知道为什么,因为我在 Android API 告诉我的那个类中扩展了 Service。你能帮我弄清楚为什么会发生这种情况以及如何解决它吗?顺便说一句,而不是this我也使用getApplicationContext()过,但它仍然崩溃=(。

谢谢你。

4

1 回答 1

1

我还没有尝试过,但是让你的服务告诉一个活动做祝酒怎么样,因为服务是一个后台活动,它的上下文似乎不能做祝酒。

您可以尝试的其他方法是扩展 Application 类,并在那里有一个 toast 生成器,然后从您的服务调用。

ApplicationExtender variableName = (ApplicationExtender) Background.this.getApplication();              
variableName.toast("message");

您的应用程序扩展器:

public class ApplicationExtender extends Application {

    public void toast(String message){
    Toast.makeText(super.getApplicationContext(),message,Toast.LENGTH_LONG).show();
    }

}

您需要将扩展​​类添加到清单中才能正常工作。

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".ApplicationExtender">

我不能保证这会起作用,我还没有尝试过。

于 2010-10-26T14:28:59.510 回答