2015-11-03 20 views
12

Trong Android, nếu bạn muốn xóa ngăn xếp hiện tại Activity và khởi chạy Activity mới (ví dụ: đăng xuất khỏi ứng dụng và khởi chạy nhật ký Activity), có vẻ như có hai cách tiếp cận.Activity.finishAffinity() vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

Có bất kỳ lợi thế nào so với cách khác nếu cấp API mục tiêu của bạn cao hơn 16 không?

1) Hoàn thành Affinity

Calling finishAffinity() từ một hoạt động. Activity.finishAffinity

2) Flags Ý định

Intent intent = new Intent(this, LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 

Cách tiếp cận finishAffinity() phù hợp cho> = API 16.

Cờ cách tiếp cận Intent phù hợp cho> = API 11.

Để rõ ràng, với mục đích làm sạch ngăn xếp hiện tại Activity, cả hai cách tiếp cận đều có vẻ hoạt động như nhau. Câu hỏi của tôi là có vấn đề với một trong những người đã trải qua và, do đó, có bất kỳ lý do nào để chọn một người khác không?

Trả lời

10

Về mặt chức năng, không có sự khác biệt, nhưng thử nghiệm này trên GenyMotion dường như có một sự khác biệt hình ảnh nhẹ. Xem truyền trên web: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

Bạn sẽ cần thử trên một loạt thiết bị để xem mức độ phù hợp của thiết bị.

Chủ quan, tôi có thể nói đi với số finishAffinity() vì nó rõ ràng hơn. Tuy nhiên, nếu bạn phải hỗ trợ < SDK 16, bạn thực sự không có lựa chọn nào.

+0

Sự chậm trễ, hoặc nhấp nháy, mà bạn đề cập ban đầu là những gì khiến tôi đặt câu hỏi finishAffinity(). IIRC, một số thiết bị Samsung nói riêng có một nhấp nháy rất rõ rệt khi sử dụng finishAffinity() nhưng tôi không còn thiết bị để kiểm tra nữa. –

+0

Trong trường hợp này, đó là phiên bản ý định có nhấp nháy theo video. – brindy

+0

Thực ra, tôi không chắc là tôi sẽ gọi nó là một nhấp nháy (dựa trên video). Có một cái gì đó chắc chắn khác nhau về những gì xảy ra trực quan mặc dù. finishAffinity trông giống như nó xuất hiện trên đầu trang, phiên bản ý định có vẻ như nó đã "hoàn thành" tiết lộ một cái khác ở trên cùng của ngăn xếp. – brindy

0

Bạn nên sử dụng cờ ý định cho điều đó.

Điều gì sẽ xảy ra nếu bạn có nhiều hoạt động, bạn sẽ gọi từ mỗi hoạt động để hoàn thành tất cả?

Tốt hơn và dễ dàng hơn nhiều khi gọi một Ý định.

Hy vọng điều này sẽ hữu ích.

+0

Mục đích của cả hai phương pháp được liệt kê trong câu hỏi của tôi là để kết thúc mọi hoạt động trong ngăn xếp hiện tại mà không cần phải gọi kết thúc() trên mỗi một cá nhân. Để rõ ràng, như xa như tôi có thể thấy, cả hai cách tiếp cận thực hiện điều này. –

0

Hãy thử điều này

Intent.FLAG_ACTIVITY_CLEAR_TOP 

trời quang đãng ngăn xếp các hoạt động trước

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