2015-04-09 19 views
13

Tôi đang cố gắng ghi thời gian chờ khởi động của ứng dụng. Cách họ đang làm là đặt thời gian bắt đầu của ứng dụng theo số Application.onCreate và cung cấp phương thức công khai trả về thời gian.Android - Sự cố khi ghi thời gian chờ khởi động

MyApplication extends Application { 
    Date startUpTime; 
    //Declare variables 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     setStartupTime(); 
     //other initializations 
    } 

    private void setStartUpTime() { 
     startUpTime = new Date(); 
    } 

    public Date getStartUpTime() { 
     return startUpTime; 
    } 
} 

MyActivity extends Activity { 
. 
. 
. 
    @Override 
    public void onStart(){ 
     logStartUpLatency(); 
     //other onStart stuff 
    } 

    private void logStartUpLatency() { 
     Date currentTime = new Date(); 
     Date startTime = (MyApplication)getApplicationContext().getStartUpTime(); 
     long latency = currentTime.getTime() - startTIme.getTime(); 
     Log.d("Start up Latency is ", Long.toString(latency)): 

    } 

Đây là cách tôi đang thử nghiệm bắt đầu của tôi lên thời gian chờ:

  • adb cài đặt myapk
  • chạy các ứng dụng để có được khởi động độ trễ đầu tiên. Tôi có thể thấy độ trễ được ghi lại là chính xác cho lần khởi động đầu tiên
  • chạy lại ứng dụng để kiểm tra độ trễ bắt đầu. Độ trễ được ghi là chính xác cho đầu (hoặc bất kỳ số lần bắt đầu nào sau đó)
  • Bây giờ tôi tăng mã và tên phiên bản của ứng dụng lên 1. Để mô phỏng nâng cấp, tôi đã sử dụng lệnh adb install -r myapk.
  • Bây giờ tôi chạy lại ứng dụng để kiểm tra độ trễ bắt đầu đầu tiên sau khi nâng cấp, mặc dù phải mất 3 giây, thời gian chờ được ghi lại không nằm trong biểu đồ.

Có ai biết tại sao điều đó có thể xảy ra không?

Cập nhật

Vì vậy, nếu tôi cài đặt gói ứng dụng sử dụng "adb cài đặt myapk -r", ứng dụng sẽ không qua Myapplication.onCreate().

Trả lời

0

Vì vậy, nếu tôi cài đặt gói ứng dụng sử dụng "adb cài đặt myapk -r", ứng dụng sẽ không qua Myapplication.onCreate(). Vì vậy, câu trả lời cho câu hỏi này. Tôi sẽ hỏi một câu hỏi riêng về lý do tại sao cài đặt một ứng dụng bằng cách sử dụng "adb install -r myapk" và sau đó bắt đầu myapk không đi qua MyApplication.onCreate()

0

Độ trễ bạn đang tính bằng mili giây. Date#getTime() trả về số lượng mili giây kể từ ngày 1 tháng 1 năm 1970, nửa đêm GMT.

Thời gian quan sát trong 3 giây là do phí tổn để gỡ cài đặt cũ và cài đặt bản dựng ứng dụng mới.

10

Tôi đề nghị sử dụng lớp TimingLogger. Theo tài liệu, bạn có thể dễ dàng theo dõi thời gian đã trôi qua và thậm chí thêm các phần tách trong quy trình.

này

TimingLogger timings = new TimingLogger(TAG, "methodA"); 
// ... do some work A ... 
timings.addSplit("work A"); 
// ... do some work B ... 
timings.addSplit("work B"); 
// ... do some work C ... 
timings.addSplit("work C"); 
timings.dumpToLog(); 

sản xuất

D/TAG (3459): methodA: begin 
D/TAG (3459): methodA:  9 ms, work A 
D/TAG (3459): methodA:  1 ms, work B 
D/TAG (3459): methodA:  6 ms, work C 
D/TAG (3459): methodA: end, 16 ms 
Các vấn đề liên quan