2010-01-25 25 views
15

Tôi có một ứng dụng với 2 hoạt động, LogonAct và MainAct. LogonAct là một hoạt động đăng nhập mà tôi muốn buộc người dùng phải trải qua mỗi khi họ quay trở lại ứng dụng. Tôi đã đặt android: clearTaskOnLaunch = "true" trên LogonAct.Làm thế nào để xóa ngăn xếp trở lại hoạt động gốc khi người dùng rời khỏi ứng dụng?

Khi tôi lần đầu tiên bắt đầu ứng dụng tôi đi qua dãy này của màn hình,

Home -> LogonAct -> MainAct -> Home

sau đó tôi làm theo trình tự này,

LogonAct -> Back -> MainAct

Tại sao nó đưa tôi trở lại MainAct ? Không nên hoạt động đó đã được đóng cửa kể từ khi LogonAct có android: clearTaskOnLaunch = "true". Tôi dự kiến ​​sẽ được đưa trở về Trang chủ khi tôi nhấn nút Back từ LogonAct.

đoạn có liên quan từ AndroidManifest.xml,

<activity android:name=".LogonAct" 
      android:clearTaskOnLaunch="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

    <activity android:name=".MainAct"> 
     <meta-data android:name="android.app.default_searchable" 
        android:value=".SearchResults" /> 
    </activity> 

Tôi đang sử dụng 1.5.

Bất kỳ trợ giúp nào được đánh giá cao.

+0

Bạn có thể chỉnh sửa câu hỏi của bạn và thêm Manifest của bạn, hoặc ít nhất là phần tử cho 'LogonAct', vì điều đó sẽ giúp mọi người phát hiện ra nếu có lỗi trong đó. –

+0

Đoạn trích từ AndroidManifest.xml bao gồm Dave. Tôi nên bao gồm họ với câu hỏi nhưng tôi không có mã trước mặt tôi. – Adrian

Trả lời

11

Tài liệu cho android:clearTaskOnLaunch đề cập rằng thuộc tính này áp dụng "bất cứ khi nào [hoạt động] được khởi chạy lại từ màn hình chính".

Tuy nhiên, trong trường hợp bạn đang nhấn nút Trang chủ để quay lại Màn hình chính, thay vì nhấn nút Quay lại. Điều này có nghĩa là đơn đăng ký của bạn không thực sự là được khởi chạy lạiMainAct không được "hoàn thành". Điều đó chỉ xảy ra khi bạn nhấn Quay lại (hoặc nếu Android giết nhiệm vụ lưu tài nguyên, v.v.).

Vì bạn chỉ có hai hoạt động trong ứng dụng của mình, bạn có thể đặt thuộc tính android:noHistory trên MainAct, do đó đảm bảo rằng người dùng không bao giờ có thể quay lại và phải vượt qua LogonAct.

Ngoài ra, có vẻ hơi khó chịu khi buộc người dùng phải đăng nhập lại mỗi khi họ điều hướng khỏi ứng dụng (ví dụ: khi họ nhận được cuộc gọi điện thoại).
Bạn có thể giữ lại mã thông báo phiên với thời gian chờ trong bộ nhớ liên tục của ứng dụng hoặc giữ kết nối mạng mở bằng dịch vụ nếu đó là cách ứng dụng của bạn hoạt động — nhưng tất nhiên tùy thuộc vào bạn và yêu cầu của bạn. :)

+1

Cảm ơn sự giúp đỡ của bạn Christopher. Tôi có một vài hoạt động khác có thể đến sau MainAct vì vậy nếu tôi sử dụng android: noHistory trên MainAct, các hoạt động khác này sẽ quay trở lại màn hình đăng nhập khi tôi chọn Quay lại. Tôi hoàn toàn đồng ý rằng việc đăng nhập vào mỗi lần bạn truy cập ứng dụng không phải là lý tưởng. Đó là một ứng dụng quản lý mật khẩu vì vậy tôi không muốn để nó có thể truy cập được quá lâu. Những gì tôi sẽ cố gắng làm là có một bộ đếm thời gian hoạt động theo cách tương tự với sudo, tức là yêu cầu mật khẩu nếu nó được hơn x giây kể từ khi nó được nhập lần cuối. – Adrian

+3

Ah. Trong trường hợp đó, bạn có thể thêm một cuộc gọi phương thức nhanh trong 'onResume()' của mỗi 'Hoạt động' mà bạn có để kiểm tra xem một khoảng thời gian nhất định đã trôi qua chưa. Nếu vậy, sau đó gọi 'finish()' và bắn một 'Intent' để gửi chúng trở lại' LogonAct'. –

15

Bạn có thể làm như sau:
1. bộ clearTaskOnLaunch = "true" trong AndroidManifest, trong tuyên bố hoạt động chính
2.trong hoạt động mà phải đóng:

@Override 
public void onBackPressed(){ 
    moveTaskToBack(true); 
} 

vì vậy nếu người dùng nhấn trở lại - nó trở lại với màn hình nếu người dùng ra mắt aplication một lần nữa - nhiệm vụ ngăn xếp xóa và ông đến để nhổ tận gốc hoạt động chính

+0

Cảm ơn muzhig Mô tả của bạn giúp tôi rất nhiều. – amity

+0

cảm ơn muzhig..it đã giúp tôi ... –

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