如何自动调用android中的方法?

时间:2014-05-06 14:08:02

标签: android android-asynctask

我正在构建一个从arduino uno中恢复图像的android应用程序,以便将它们作为视频连续显示,我编写了一个asyncTask来读取图像并在图像视图中显示它,我如何自动调用此方法。 这是我的asyncTask 我创建了一个调用异步任务的按钮,但是如何连续调用它

class myAsyncTask extends AsyncTask<Void, Void, Void> 
{
    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        mmInStream = tmpIn;
        int byteNo;
        try {
            byteNo = mmInStream.read(buffer);
            if (byteNo != -1) {
                //ensure DATAMAXSIZE Byte is read.
                int byteNo2 = byteNo;
                int bufferSize = 7340;
                int i = 0;
                while(byteNo2 != bufferSize){
                    i++;
                    bufferSize = bufferSize - byteNo2;
                    byteNo2 = mmInStream.read(buffer,byteNo,bufferSize);
                    if(byteNo2 == -1){
                        break;
                    }
                    byteNo = byteNo+byteNo2;
                }
            }
        }
        catch (Exception e) {
            // TODO: handle exception
        }
        return null;
    }

    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        bm1 = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);
        image.setImageBitmap(bm1);
    }
}

2 个答案:

答案 0 :(得分:0)

Handler h = new Handler();
h.postDelayed(r, DELAY_IN_MS);
Runnable r = new new Runnable() {
    public void run() {
        // Do your stuff here
        h.postDelayed(this, DELAY_IN_MS);
    }
}

答案 1 :(得分:0)

如果它来自后台线程,则一种可能性是使用无界for循环。例如,假设AsyncTask当前执行:

private class MyTask extends AsyncTask<T1, Void, T3>
{
     protected T3 doInBackground(T1... value)
     {
         return longThing(value);
     }

     protected void onPostExecute(T3 result)
     {
         updateUI(result);
     }
 }

然后将其重写为:

private class MyTask extends AsyncTask<T1, T3, T3>
{
     protected T3 doInBackground(T1... value)
     {
         for (;;)
         {
             T3 result = longThing(value);
             publishProgress(result);
             Thread.sleep(1000);
         }

         return null;
     }

     protected void onProgressUpdate(T3... progress)
     {
         updateUI(progress[0]);
     }
 }

当然,您应该检查以打破循环(例如,当“活动”暂停或销毁时)。

另一个选择是创建一个Handler实例并重复调用postDelayed()。