Java 如何无限循环异步任务?

Java 如何无限循环异步任务?,java,android,android-asynctask,Java,Android,Android Asynctask,我正在做我的学校项目,所以我有一个提供给我的库文件,它扫描卡上的代码并返回它。问题是它只有在我按下按钮时才起作用。但是,我希望它始终运行,当我扫描一张卡时,它将自动返回卡id,而无需按下按钮 部分获取卡值,卡id总共16个字符,但每次需要3-4个字符。所以它就像: id=10 id=2310 id=632010。。。。id=123434233632010 当没有卡时,它返回null 如何创建在后台运行并无限扫描的异步任务?当代码为16个字符时,它会停止任务并开始新的活动 编辑: 公共类TestS

我正在做我的学校项目,所以我有一个提供给我的库文件,它扫描卡上的代码并返回它。问题是它只有在我按下按钮时才起作用。但是,我希望它始终运行,当我扫描一张卡时,它将自动返回卡id,而无需按下按钮

部分获取卡值,卡id总共16个字符,但每次需要3-4个字符。所以它就像:

id=10 id=2310 id=632010。。。。id=123434233632010 当没有卡时,它返回null

如何创建在后台运行并无限扫描的异步任务?当代码为16个字符时,它会停止任务并开始新的活动

编辑:

公共类TestService扩展了IntentService{
公共int句柄,类型=0x26;
MediaReader md=新的MediaReader();
弦梳联;
公共测试服务(){
超级(“测试服务”);
//TODO自动生成的构造函数存根
}
@凌驾
受保护的手部内容无效(意图){
while(true){
试一试{
睡眠(1000);
}捕捉(中断异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
试一试{
卡迪德=”;
int-ret=md.CardPoll(类型);
如果(ret==0){
对于(int i=0;i
一个
异步任务
,尽管人们普遍认为它不会无限期地运行,也不应该无限期地运行
AsyncTask
用于完成需要一些努力甚至网络操作的短期任务,之后,任务就结束了

如果您希望无限期地运行循环,并且希望在后台运行,我建议使用后台
服务
。这不像
AsyncTask
doInBackground()
方法那样提供
线程
,但您可以自己创建一个


由于它是一项
服务
,因此您需要相应地处理它,并在需要时始终使用
startService()
stopService()
,否则即使您的应用程序关闭了,它也可能在不需要时仍在运行(这不是一个好的做法)。

一项
异步任务
,不打算无限期运行,也不应该无限期运行
AsyncTask
用于完成需要一些努力甚至网络操作的短期任务,之后,任务就结束了

如果您希望无限期地运行循环,并且希望在后台运行,我建议使用后台
服务
。这不像
AsyncTask
doInBackground()
方法那样提供
线程
,但您可以自己创建一个


由于它是一项
服务
,因此您需要相应地处理它,并在需要时始终使用
startService()
stopService()
,否则即使您的应用程序关闭了,它也可能在不需要时仍在运行(这不是一个好的做法)。

一项
异步任务
,不打算无限期运行,也不应该无限期运行
AsyncTask
用于完成需要一些努力甚至网络操作的短期任务,之后,任务就结束了

如果您希望无限期地运行循环,并且希望在后台运行,我建议使用后台
服务
。这不像
AsyncTask
doInBackground()
方法那样提供
线程
,但您可以自己创建一个


由于它是一项
服务
,因此您需要相应地处理它,并在需要时始终使用
startService()
stopService()
,否则即使您的应用程序关闭了,它也可能在不需要时仍在运行(这不是一个好的做法)。

一项
异步任务
,不打算无限期运行,也不应该无限期运行
AsyncTask
用于完成需要一些努力甚至网络操作的短期任务,之后,任务就结束了

如果您希望无限期地运行循环,并且希望在后台运行,我建议使用后台
服务
。这不像
AsyncTask
doInBackground()
方法那样提供
线程
,但您可以自己创建一个



由于它是一项
服务
,因此您需要相应地处理它,并在需要时始终使用
startService()
stopService()
,否则即使您的应用程序关闭,它也可能在不需要时仍在运行(这不是一个好的做法)。

定义我的服务后,我怎样才能让它循环呢?只要在里面定义一个循环,就好像你在其他地方做一样。我建议在
线程
中定义您的循环,因为不应该在主线程中定义无限循环。我还建议尽可能地睡觉(
Thread.sleep(…)
),至少睡一小段时间。好的,完成了!你能检查一下我的代码,看看是否足够好吗?我在主帖子上编辑了它。对我来说似乎没问题,这应该是一种方法。用此服务的值在主活动中更改文本视图的好方法是什么?在定义了我的服务之后,我如何让它循环?只需在内部定义一个循环,就像在其他地方一样。我建议在
线程
中定义您的循环,因为不应该在主线程中定义无限循环。我还建议在任何时候睡觉(
Thread.sleep(…)
    public class TestService extends IntentService {

    public int handle, type = 0x26;
    MediaReader md = new MediaReader();
    String cardId;

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

    @Override
    protected void onHandleIntent(Intent intent) {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                cardId = "";
                int ret = md.CardPoll(type);
                if (ret == 0) {
                    for (int i = 0; i < md.uid_len; i++) {

                        cardId = cardId + md.uid[i];
                    }
                    Log.e("MyLogs", cardId);
                }
            } catch (NullPointerException e) {
                Log.e("deneme", "No card detected");
            }

        }

    }

}