2013-08-26 44 views
13

Tôi google nó nhưng ngay cả khi tôi chạy mã này dưới đây nó đã không hoàn thành các hoạt động khác.làm thế nào để hoàn thành tất cả các hoạt động ngoại trừ hoạt động đầu tiên?

ButtonClick.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      LoginManager.getInstance().ctrl = false; 
      UserManager.getInstance().loginControl(); 
      OrderManager.getInstance().orderCtrl = false; 
      Intent intent = new Intent(OrderComplete.this, 
        MainActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      startActivity(intent); 
      finish(); 
     } 
    }); 
} 
+2

tôi cũng nói thêm 'android: launchMode = "singleTop"' đối với tệp kê khai – mstfdz

+0

là nó không hoàn thành tất cả Hoạt động hoặc một số Hoạt động? Tôi nghĩ rằng các hoạt động vẫn đang hoạt động như Chạy bất kỳ Chủ đề nào có thể không được hoàn thành theo cách này! –

+0

khi tôi muốn quay lại một số hoạt động vẫn còn ở đó – mstfdz

Trả lời

5

CẬP NHẬT Vui lòng tham khảo câu trả lời khác, tôi không thể xóa câu trả lời vì nó được đánh dấu là chấp nhận

Theo thảo luận của chúng tôi trong Comments

của bạn Mã đã cho là tốt!

Q1. Tại sao nó không hoàn thành tất cả các hoạt động?

Ans. Tôi nghĩ rằng All Activities Are FinishedExcept ActivitiesThread or AysncTask đang chạy trong nền hoặc chưa hoàn thành!

Q2. Làm thế nào tôi có thể kết thúc chúng?

Ans. Hãy chắc chắn rằng chủ đề của bạn nên được hoàn thành! hoặc You can Try Timeout etc!


bổ sung

Pass String with Your Intent 

cho điều này Thêm Mã

intent.putExtra("finishingallact", "yes"); 

Bên Đầu tiên hoạt động (Mà không phải là để được hoàn thành)

Hãy thử bằng cách làm choObject of Remaining Activities để kết thúc chúng!

Vì vậy thử mã:

if(getIntent().getStringExtra("finishingallact")!=null) 
{ 
if(getIntent().getStringExtra("finishingallact").toLowerCase().equals("yes")) 
    { 
    yourRemainingAct act1=new yourRemainingAct(); 
    act1.finish(); 
    // Try Same For ALl Remaining Activities 
    } 
} 
+2

cảm ơn, nó hoạt động tốt cho tôi, cảm ơn rất nhiều lần nữa. – mstfdz

+0

Rất vui được giúp bạn :) –

+1

Lưu ý về nhiều điều: không nên giết ứng dụng trong Android! –

0

remove android: lanchMode = "singleTop" từ menifest và sử dụng setFlag intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

6

khi bạn đi từ một hoạt động để kết thúc cuộc gọi khác hoạt động();

làm như

public void onClick(View v) { 
    Intent i = new Intent(A.this,B.class); 

    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(i); 
    finish(); // to end the current activity 
} 

cuộc gọi kết thúc này() sau khi startActivity (...), do đó Một hoạt động ll ra khỏi ngăn xếp. khi bạn nhấn nút quay lại Một hoạt động sẽ không có trong ngăn xếp.

5

Hãy thử điều này nó hoạt động tốt với tôi

// clear whole activity stack 

    Intent intent = new Intent("clearStackActivity"); 
    intent.setType("text/plain"); 
    sendBroadcast(intent); 

// start your new activity 
Intent intent = new Intent(OrderComplete.this, 
        MainActivity.class); 
startActivity(intent); 

CẬP NHẬT

xin lỗi tôi quên để cung cấp cho những dòng này. Đặt các dòng này trong phương thức onCreate() của tất cả các Hoạt động hoặc nếu bạn có bất kỳ hoạt động cơ sở nào, bạn có thể đặt nó ở đó, sau đó không cần phải đưa vào tất cả các hoạt động.

private KillReceiver clearActivityStack; 
clearActivityStack = new KillReceiver(); 
     registerReceiver(clearActivityStack, IntentFilter.create("clearStackActivity", "text/plain")); 

CẬP NHẬT

Vì vậy, xin lỗi quên một điều nữa để cung cấp cho đặt lớp này trong hoạt động cơ sở của bạn

private final class KillReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      finish(); 
     } 
    } 
+0

nó không hoạt động cho tôi! – mstfdz

+0

Giết người nhận không thể được giải quyết một loại! – mstfdz

+0

Và bây giờ nó hoạt động :) cảm ơn .. – mstfdz

4

chỉ cần loại bỏ mọi hoạt động từ đống trừ hoạt động đầu tiên của bạn

youractivity.this.finish(); 

hoặc bạn có thể sử dụng Acti vity Đầu đơn. cho rằng bạn có thể sử dụng:

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
0

1.If chúng ta không có lớp AsyncTask hoặc sợi trong lớp học của chúng tôi sau đó bằng cách đơn giản

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) 

ghi mã này, có thể dễ dàng loại bỏ tất cả hoạt động từ ngăn xếp

2. điều này cũng có thể được thực hiện bằng cách thực hiện hoạt động của trình khởi chạy là tác vụ đơn lẻ điều này có thể được thực hiện bằng các thay đổi trong tệp kê khai. như

android:launchMode="singleTask" 

3.But nếu chúng ta có AsyncTask trong ứng dụng của chúng tôi và cũng sử dụng các chủ đề sau đó cả hai phương pháp trên không thành công ..

cho rằng chúng ta phải kết thúc hoạt động từng người một

cho ví dụ. Chúng tôi có bốn hoạt động A, B, C, D và mỗi lớp có nhiệm vụ async

và chúng ta phải đi từ A -> B-> C-> D

và từ D Chúng tôi có một lần nữa quay trở lại * "A" và sau khi nhấn nút Back của thiết bị ứng dụng nên có kết thúc hoặc có thể nói lối *

cho rằng chúng ta phải làm cho đối tượng tĩnh của các hoạt động của tất cả các lớp học. Giống như

**In class A** 
    public static Avtivity mactivity; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_third); 
      mactivity=this; 
      } 

Làm điều này trong mọi tầng lớp B, C

Và sau đó trong D

Bằng cách nhấn một nút hoàn thành các đối tượng của mọi tầng lớp như

* * mButton.setOnClickListener (new OnClickListener() {

 @Override 
     public void onClick(View v) 
     { 
      B mB=new B(); 
      mB.mactivity.finish(); 
        //////do this for all class which are present in stack of activities 
          finish(); 
          ////this will finish the D class and we reach at A class 
        } 
        });** 

Thats giải quyết ...

Tôi biết không phải là một cách gud của nó nhưng cũng không phải là xấu ...Và điều chủ yếu là lao động của mình :)

14

Để xóa các hoạt động hàng đầu từ ngăn xếp sử dụng mã dưới đây

Intent intents = new Intent(A.this, B.class); 
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intents); 
finish(); 

Nó sẽ xóa tất cả các hoạt động từ đống hoặc AsyncTask chạy hay không trong ứng dụng.

Nó hoạt động tốt và cũng là một cách tiếp cận tốt

+0

Cái này phù hợp với tôi. Tuy nhiên, tôi tin rằng có một lỗi đánh máy và nó phải là 'startActivity (intents);' – Zerato

2

Chúng ta có thể sử dụng:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(i); 
1

Để loại bỏ tất cả các hoạt động trong khi mở một hình mới, sau đó thực hiện như sau

Intent intent = new Intent(getApplicationContext(), NewAcivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent);