簡體   English   中英

Android-測量通過意圖打開活動與收到結果之間的時間

[英]Android - Measuring the time between opening an activity via intent and when results are received

我有一個簡單的應用程序,可以通過ZXing打開Barcode Scanner App。

現在,我想知道掃描需要多少時間。 基本上,是從啟動意圖開始的時間到獲得結果的時間。 現在,我知道這很簡單,只需在執行意圖時放置一個nanoTime對象,然后在獲取結果時放置另一個nanoTime,然后將兩者相減並相乘即可得到秒/毫秒。

但是,我有on循環的意圖,因為我想掃描一系列QR碼,並且我發現for循環是解決此問題的最佳方法。

所以我有幾個全局時間變量,很長的開始,結束,時間;

這是意圖的代碼:

//Multi Scan Button
public Button.OnClickListener onMultiScan = new Button.OnClickListener() {
    public void onClick(View v) {

        //start = System.nanoTime();

        for(int i = 0 ; i < 5 ; i++){
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage("com.google.zxing.client.android");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

            //start = System.nanoTime();                

            startActivityForResult(intent, multiScan);


            }


    }
};

這是獲取輸入的代碼。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //ordinary scan
    if (requestCode == ordinaryScan) {

        if (resultCode == RESULT_OK) {

            end = System.nanoTime();
            time = (end - start) / 1000000;
            System.out.println("Time" + " " + /*i +  +*/ time);

            String contents = data.getStringExtra("SCAN_RESULT");
            Toast.makeText(getApplicationContext(), contents, Toast.LENGTH_SHORT).show();

        }

        else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }

    //multiple scan
    if (requestCode == multiScan) {
        end = System.nanoTime();
        time = (end - start) / 1000000;
        System.out.println("Time" + " " + /*i +  +*/ time);

        if (resultCode == RESULT_OK) {
            String content = data.getStringExtra("SCAN_RESULT");
            //codes = codes + contents + " ";
            inputs[counter] = content;
            counter += 1;

            if(counter == 5){
                //output();
                verify();
            }

        }


        else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
 }

我注釋掉了啟動計時器的部分,因為我不確定將其放置在哪里。 發生的事情是,如果我在循環之前調用它,只會得到一個結果,如果將其放入循環中,則會得到多個結果,彼此之間相差不遠。

如果僅一次調用一個意圖即可獲得完成所需的時間,這很容易,但是如果多次調用它,就會變得很棘手。

那么,有沒有辦法適當地花費時間來打開意圖並獲得結果呢? 我樂於接受建議,即使這意味着要重寫我多次調用活動的方式(我目前正在使用循環)。

我還希望能夠在立即掃描代碼后立即獲得時間,因此我知道了活動調用和活動結果之間的時間。 我不想等待每個通話結束,直到我得到每個通話結束所花費的時間。 我想實時更新。 謝謝。

如果仍要使用循環,則一種可能的方法是不使用單個多重掃描請求代碼,而是為循環的每次運行使用一個。

類似於startActivityForResult(intent, MULTISCAN_BASE + i);

這樣,您將能夠分別跟蹤所有運行,因為您將能夠識別結果涉及的運行:

i = requestCode - MULTISCAN_BASE

最后一步是將開始時間放在一個數組中,每個循環周期使用一個。

int[] start = new int[5];

然后檢查完​​成時間並獲得時間總和就很簡單了。

好的,找到了一種使其工作的方法。 說實話,這有點不完善,但它可以實時更新。 基本概念是使multiScan requestCode每次在onActivityResult方法中提供結果時都會遞增。 然后有一個if語句,用於檢查multiScan requestCode是否已達到所需的最大迭代次數。

所以這是全局變量:

int multiScan = 1;
int multiScanBase = 1;
long start, end, time;

然后multiScanButton看起來像:

//Multi Scan Button
public Button.OnClickListener onMultiScan = new Button.OnClickListener() {
    public void onClick(View v) {

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

        start = System.nanoTime();
        startActivityForResult(intent, multiScan);

    }
};

然后, onActivityResult方法將如下所示:

//multiple scan
if (requestCode < multiScanBase + 5 ) {
        end = System.nanoTime();

        time = (end - start) / 1000000;
        System.out.println("Request Code = " + multiScan);

        System.out.println("Time" + " " + /*i +  +*/ time);

        if (resultCode == RESULT_OK) {
            String content = data.getStringExtra("SCAN_RESULT");
            //codes = codes + contents + " ";
            inputs[counter] = content;
            counter += 1;

            if(counter == 5){
                //output();
                verify();
            }

        }   
        else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }

            //This is the part where I check for the requestCode
            //In this example, I wanted to iterate the activity 5 times
            //So if the request code is still less than the base + number of iterations
            //Increment the multiScan requestCode and run the method again
            //In this way, the time for each scan is given in real time
        if(requestCode < multiScanBase + 5){
            multiScan += 1;
            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, multiScan);

        }
 }

所以那里。 該代碼對我有用,並且實時給出更新。 感謝您提供有關如何執行此操作的想法。

大家聖誕快樂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM