Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 你在后台工作吗_Android_Service_Intentservice - Fatal编程技术网

Android 你在后台工作吗

Android 你在后台工作吗,android,service,intentservice,Android,Service,Intentservice,我需要有一个背景线程,工作无限期。我编写了以下代码来定义IntentService: public class RecordInternetUsageService extends IntentService { public RecordInternetUsageService() { super("test"); // TODO Auto-generated constructor stub } @Override protected void onHandleInten

我需要有一个背景线程,工作无限期。我编写了以下代码来定义IntentService:

public class RecordInternetUsageService extends IntentService {

public RecordInternetUsageService() {
    super("test");
    // TODO Auto-generated constructor stub
}

@Override
protected void onHandleIntent(Intent intent) {

    synchronized (this) {
        try {
            wait(1000);

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    Toast.makeText(this, "test", Toast.LENGTH_LONG).show();
}
}

我有两个问题,这是一个合适的类做作品无限期的背景
为什么当我想使用by wait()方法休眠此线程时,抛出下面提到的异常?
“向死线程上的处理程序发送消息”。

我如何解决这个问题?

要完成长时间的处理任务,即使您的应用程序已关闭,即在后台必须使用服务。。。但您可以在该服务的主线程上执行长时间的处理工作,否则您将得到ANR(android没有响应)。因此,您必须创建一个后台线程,提交该后台线程上的所有任务(由Handle类完成),并处理所有提交和响应的内容。。。为了总结此设计模式,提供了IntenServcie类

IntentService类在提交作业时自动调用线程,当作业完成时,它将终止服务并释放内存。IntentDrive完成其工作后立即退出

这里的问题是,您正在IntentService管理的线程内创建Toast。系统将使用与此线程关联的处理程序来显示和隐藏Toast

首先,Toast将正确显示,但当系统试图隐藏它时,onHandleIntent方法完成后,将抛出错误“向死线程上的处理程序发送消息”,因为创建Toast的线程不再有效