2011-06-30 33 views
7

Tôi có một hoạt động đơn giản chỉ hiển thị hai nút và tôi muốn tải một hoạt động khác ngay khi hoạt động đó tải xong.bắt đầu một hoạt động mới trong onCreate chỉ hoạt động với độ trễ

@Override 
public void onCreate(Bundle savedInstanceState) { 
    dbg("starting on create"); 
    super.onCreate(savedInstanceState); 

    dbg("stting content view"); 
    setContentView(R.layout.main); 

    createDrPopup(); 

} 

private void createDrPopup(){ 
    dbg("created new activity"); 
    startActivityForResult(new Intent(this, DrPopup.class), 
          DR_POPUP_ACTIVITY_ID); 
} 

Tôi không gặp bất kỳ lỗi nào với mã này, nhưng hoạt động mới không tải đúng cách. Bằng cách này tôi chỉ nhận được một màn hình blanc.

Nhưng nếu tôi gọi hoạt động mới với độ trễ thì mọi thứ sẽ hoạt động tốt.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    dbg("starting on create"); 
    super.onCreate(savedInstanceState); 

    dbg("stting content view"); 
    setContentView(R.layout.main); 

    Thread splashTread = new Thread() { 
     @Override 
     public void run() { 
      try { 
       sleep(500); 
      } catch(InterruptedException e) { 
      } finally { 
       createDrPopup(); 
      } 
     } 
    }; 
    splashTread.start(); 
} 

private void createDrPopup(){ 
    dbg("created new activity"); 
    startActivityForResult(new Intent(this, DrPopup.class), 
          DR_POPUP_ACTIVITY_ID); 
} 

câu hỏi của tôi là thế này:

Có cách nào tốt hơn để chờ đợi cho một hoạt động để hoàn tất. Tôi thậm chí không thể chắc chắn rằng 500ms sẽ là đủ mỗi lần.

Cảm ơn bạn đã đề xuất bất kỳ.

yêu cầu mã cho dr_popup (đây là đơn giản như nó được)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    dbg("Created new activity"); 

    setContentView(R.layout.dr_webview); 
    dbg("web view created"); 

} 

và cả hai bố trí

chính

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
    <Spinner android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="wrap_content" android:id="@+id/spinner1"></Spinner> 
</LinearLayout> 

sổ popup

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dr_popup_webview_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
    <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dr_popup_webview" android:layout_width="fill_parent" android:layout_height="100dip"/> 
    <LinearLayout android:id="@+id/frameLayout1" android:layout_height="100dip" android:layout_width="fill_parent" android:orientation="horizontal"> 
     <EditText android:id="@+id/dr_submit_text"   android:layout_height="wrap_content"   android:layout_width="wrap_content"   android:layout_weight="4"> 
      <requestFocus></requestFocus> 
     </EditText> 
     <Button    android:text="Button"   android:id="@+id/dr_submit_button"   android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1"></Button> 
    </LinearLayout> 
</LinearLayout> 

chỉnh sửa: các vấn đề se ems được gây ra bởi sự biểu hiện dòng @android: phong cách/Theme.Dialog

<activity android:theme="@android:style/Theme.Dialog" 
       android:name=".DrPopup" 
       android:label="@string/dr_popup"> 
    </activity> 

Nếu tôi loại bỏ, mọi thứ dường như để làm việc, nhưng tôi muốn một giải pháp mà có thể làm việc ngay cả với dòng đó.

và ảnh hiển thị sự cố. http://i.imgur.com/ZOcyw.png

+0

Xin chào, bạn có thể cung cấp mã cho DrPopup không. – Deva

+1

Vâng, tôi không biết chắc chắn, nhưng có lẽ ActivityManager không thể xử lý bắt đầu một Hoạt động mới khi một Activity khác vẫn còn trong phương thức vòng đời onCreate(). Bộ đếm thời gian cho phép đủ thời gian để onCreate() hoàn tất ... –

+0

Tôi cũng đã thêm mã và các tệp xml nữa và tôi nên thêm Tôi đang làm việc trên android 1.5 – zidarsk8

Trả lời

5

Tôi không thấy bất kỳ lý do nào từ mã được cung cấp tại sao bạn phải chèn trễ 500 ms ... Đó không phải là một ý nghĩa để chèn độ trễ đó. Một số giải thích là cần thiết: 1. Bạn đã xử lý nặng trong hoạt động ban đầu chưa? 2. startActivityForResult được gọi với mục đích (vì các đoạn mã của bạn không hiển thị bất kỳ triển khai onActivityResult nào)?

tôi sẽ cố gắng thực hiện một ví dụ rất nhỏ và cập nhật các bài càng sớm càng tốt ...

- Cập nhật

Sau nhiều nỗ lực để hiểu và khắc phục vấn đề này với một phiên chat song song, tôi sao chép các vấn đề trên giả lập 1.5 mới. Sự cố cuối cùng xuất phát từ việc sử dụng android: theme = "@ android: style/Theme.Dialog" cho hoạt động vui chơi. Vấn đề được quan sát trên Android 1.5 (cả thiết bị và trình mô phỏng). Bất cứ điều gì được khai báo trong bố cục thứ hai, bất cứ khi nào hoạt động liên quan được bắt đầu, không có gì được hiển thị. Màn hình hiển thị chỉ là trống và một nút nhấn ở mặt sau sẽ bắt đầu hiển thị tạm thời hoạt động nhưng đi đến hoạt động đầu tiên (phần sau là danh nghĩa). Tôi không thể giải thích lý do tại sao điều này xảy ra và tôi đề nghị zidarsk8 cung cấp cho PopupWindow một thử hoặc xác định một phong cách tùy chỉnh (phương pháp thử/lỗi dựa trên định nghĩa nguồn Android.Dialog).

+0

Tôi đồng ý rằng nó hoàn toàn vô nghĩa, đó là những gì tôi đang hỏi ở đây, vì tôi không biết tại sao điều này sẽ chỉ làm việc với sự chậm trễ. Nhưng có vẻ như vậy. – zidarsk8

+0

Tôi vừa thử từ onStart, nhưng kết quả là như nhau, bắt đầu mà không có sự chậm trễ làm cho hoạt động mới mà không có bất kỳ nút hoặc bất cứ điều gì. – zidarsk8

+0

Nó hoạt động ở đây không chậm trễ (với một startActivity đơn giản) ngoại trừ WebView xuất hiện sau khi các yếu tố bố cục khác. – Renaud

Các vấn đề liên quan