2012-01-17 36 views
6

Tôi không biết tại sao điều này lại khó hiểu. Tôi có hoạt động chính của mình, khi được khởi chạy, hãy kiểm tra xem đây có phải là lần đầu tiên nó được mở hay không. Nếu có, nó sẽ đóng hoạt động chính và mở hoạt động cài đặt/giới thiệu với FLAG_ACTIVITY_NEW_TASK. Quá trình thiết lập bao gồm ba hoạt động (A, B và C). Vào cuối hoạt động C, làm thế nào để làm cho nó rõ ràng và nhiệm vụ thiết lập có chứa A, B và C và bắt đầu lại hoạt động chính. Tôi đã thử thêm FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP vào hoạt động chính Intent nhưng khi tôi nhấn QUAY LẠI, nó sẽ trở lại hoạt động C của quá trình thiết lập. Làm thế nào để tôi làm rõ nhiệm vụ của các hoạt động A, B và C khi C hoàn thành và bắt đầu nhiệm vụ chính? Cảm ơn!Xóa nhiệm vụ và bắt đầu một hoạt động mới

Tôi đang xây dựng trong Android 1.6 (API 4), vì vậy một số cờ Activity có thể bị giới hạn.

+0

Kết thúc hoạt động C khi bạn tiếp tục với Hoạt động chính. – Mudassir

+0

xoá cờ chỉ mất một hoạt động ngoài ngăn xếp, phải không? – L7ColWinters

+0

@Mudassir Nếu tôi chỉ hoàn thành Hoạt động C, thì khi tôi nhấn BACK từ hoạt động chính, nó chỉ đi đến Hoạt động B. – Brian

Trả lời

0

tôi đã trả lời một câu hỏi tương tự here

Như Mudassir nói trong bình luận của họ chỉ finish() hoạt động của bạn ngay lập tức sau khi bắt đầu một cái mới.

+0

Không, tôi muốn cho phép người dùng có thể quay lại một bước nếu họ cần trong quá trình thiết lập. Tất cả những gì tôi muốn là hoàn thành chồng các hoạt động thiết lập khi bước cuối cùng được thực hiện. – Brian

2

FLAG_ACTIVITY_CLEAR_TOP sẽ xóa hoạt động đó là hoạt động của cùng một cá thể hoạt động. Trong trường hợp của bạn, tất cả các hoạt động của bạn có các trường hợp khác nhau nên FLAG_ACTIVITY_CLEAR_TOP sẽ không hoạt động. Để xóa nhiệm vụ của bạn, hãy tạo một cá thể Hoạt động trong mỗi hoạt động của bạn và chỉ định cá thể đó 'this' trên phương thức onCreate của bạn trong mỗi hoạt động. bất cứ khi nào bạn muốn xóa nhiệm vụ của bạn, hãy gọi instance.finish(). và bắt đầu hoạt động mà bạn muốn.

+1

Thao tác này có thể hoàn thành tất cả hoạt động BA cùng một lúc không? – Mudassir

+0

không phải của nó một lần, nhìn thấy bạn có Hoạt động A, B, C. Để hoàn thành tất cả những điều này cùng một lúc, bạn chỉ cần thực hiện một thao tác tương tự bên dưới activityA_instace.finish(); activityB_instace.finish(); activityC_instace.finish(); cũng đảm bảo các phiên bản của bạn là tĩnh công khai từ hoạt động mà bạn đã khai báo. Nếu nó là như vậy, bạn thực sự có thể xóa nhiệm vụ của bạn từ bất cứ nơi nào bằng cách tôi chỉ cho thấy ở trên – amandroid

+0

Chính xác những gì bạn có nghĩa là bằng ví dụ? Bạn có thể giải thích bằng cách sử dụng một số mã? – Mudassir

0
class A extends Activity { 
public static Activity instanceOfA = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfA = this; 
} 
} 

class b extends Activity { 
public static Activity instanceOfB = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfB = this; 
} 
} 


class c extends Activity { 
public static Activity instanceOfC = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfC = this; 
} 
} 

Bây giờ giả sử bạn muốn xóa tất cả các nhiệm vụ từ hoạt động hiện tại của bạn, sau đó gọi instanceOfA.finish(); instanceOfB.finish(); instanceOfC.finish();

+9

Điều này là không thể chấp nhận. Bạn đang bị rò rỉ tất cả các hoạt động và tất cả các tài nguyên (xem hiarerchies, * images *) liên kết với chúng. –

+0

Điều gì đó tương tự với câu trả lời này (http://stackoverflow.com/a/3008684/269876) sẽ phù hợp với bạn tốt hơn. Như @ JonasAlves chỉ ra, bạn đang rò rỉ tất cả các hoạt động đó bằng cách sử dụng các thống kê. Thay vào đó, hãy đưa ra một thông báo mà bạn có thể phát khi thiết lập hoàn tất và có từng hoạt động thiết lập lắng nghe phát sóng. Khi họ nhận được thông báo hoàn thành thiết lập, họ có thể tự hoàn thành và không cần có thống kê để đạt được điều này. –

+2

Tham chiếu tĩnh đến các hoạt động có nghĩa là số lần xem của bạn vẫn còn trong bộ nhớ và không được tái chế, dẫn đến rò rỉ bộ nhớ. – George

1

Trên thực tế này có thể đạt được với startActivityForResult

public class A extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, B.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     finish(); 
     } 
    } 
} 

public class B extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, C.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     setResult(RESULT_OK); 
     finish(); 
     } 
    } 
} 

public class C extends Activity { 
    public onButtonClick() { 
     setResult(RESULT_OK); 
     finish(); 
    } 
} 

Tôi nghĩ rằng đây là một cách đúng đắn, bạn không bị rò rỉ bất cứ điều gì theo cách này.

PS: Tôi biết đây là bài đăng cũ, nhưng có thể ai đó sẽ thấy điều này hữu ích.

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