如何无限循环Asynctask?

时间:2014-05-01 11:22:07

标签: java android android-asynctask

我正在研究我的学校项目,所以我有一个提供给我的库文件,它扫描卡中的代码并将其返回。问题是它只有在按下按钮时才有效。但是,我希望它始终运行,当我扫描卡时,它会自动返回卡ID而无需按下按钮。

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

id = 10 id = 2310 id = 632010 .... id = 123434233632010

如果没有卡,则返回null。

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

编辑:

    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");
            }

        }

    }

}

1 个答案:

答案 0 :(得分:3)

AsyncTask,尽管受到普遍的看法,但并不打算无限期地运行,实际上不应该这样。 AsyncTask旨在执行需要一些努力甚至网络操作的简短任务,之后,它们就会结束。

如果你想要无限期地运行一个循环而你想在后台运行它,我建议使用背景Service。这不会提供Thread作为AsyncTask的{​​{1}}方法,但您可以自己创建一个。

由于它是doInBackground(),您需要相应地处理它,并在需要时始终使用ServicestartService(),否则即使您的应用已关闭,它仍可能正在运行当它不需要时(这不是一个好习惯)。