实现AsyncTask线程的问题

时间:2011-09-12 07:01:40

标签: android barcode-scanner

我有以下问题......我正在我的Android应用程序中实现一个QR code游戏...这是通过启动此intent来完成的:

 Intent intent = new Intent(
                           "com.google.zxing.client.android.SCAN");
                   intent.setPackage("com.google.zxing.client.android");
                   intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                   startActivityForResult(intent, 0); 

换句话说,我启动了Barcode Scanner应用程序。

我想要启动此应用程序,即使用户开始扫描条形码,应用程序也会在两分钟后自动关闭。

当然,如果用户没有平均时间。

我尝试实现这样的AsyncTask线程:

onCreate()

中的

initTask=new InitTask();
initTask.execute();

在onCreate()之外

private class InitTask extends AsyncTask<Void,Void,Void>{

           protected Void doInBackground(Void...unused){

           new Runnable() {
                @Override
                public void run() {
                 try {
                   Thread.sleep(20000);
                 } 
                 catch (InterruptedException e) {
                   e.printStackTrace();
                 }
                 Intent intent = new Intent(
                           "com.google.zxing.client.android.SCAN");
                   intent.setPackage("com.google.zxing.client.android");
                   intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                   startActivityForResult(intent, 0); 
                }
               }.run();
                this.cancel(true);


           return null;

       }

   }

在onCreate()之外

   public void onActivityResult(int requestCode, int resultCode, Intent intent) {
     //..........
    }

问题是应用程序被打开但是在2分钟后它没有自动关闭。 有人知道我怎么能做到这一点?

2 个答案:

答案 0 :(得分:1)

<强>更新

private class InitTask extends AsyncTask<Void,Void,Void>{
@Override
protected void onPreExecute()
{
   Intent intent = new Intent("com.google.zxing.client.android.SCAN");
   intent.setPackage("com.google.zxing.client.android");
   intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
   startActivityForResult(intent, 1515);
}
protected Void doInBackground(Void...unused){

try
{
       Thread.sleep(20000);
}
catch(Exception e)
{
    System.out.println(e);
}
return null;

}
@Override
protected void onPostExecute(Void result) 
{

   finishActivity(1515);

}


}

活动结果

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
            if (requestCode == 1515) {
                if (resultCode == RESULT_OK) {
                    String contents = intent.getStringExtra("SCAN_RESULT");
                    String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                    System.out.println("it is ok");
                    // Handle successful scan
                } else if (resultCode == RESULT_CANCELED) {
                    // Handle cancel
                    System.out.println("it is cancel");
                }
            }
        }

答案 1 :(得分:0)

我认为这里有很多问题。

cancel()不会强制阻止任务在执行过程中执行。如果它还没有,它会阻止它运行。

即使它确实如此,也不会做你想要的。您的runnable启动一个完全不同的Activity并立即返回。它不阻止或等待。它已经在2分钟后完成。

即使没有 - 中断此调用对其他Activity也没有影响。您可以强制关闭另一个活动(好吧,不是没有平台的某些许可)。

你的超时不是2分钟,而是20秒。