2011-06-29 33 views
11

Ứng dụng Android của tôi có số WebView yêu cầu plugin Flash. Chế độ xem web sẽ cung cấp liên kết Thị trường cho Adobe Flash nếu nó chưa được cài đặt. Sau khi cài đặt Flash, cách duy nhất để khởi tạo nó trong ứng dụng của tôi là buộc thoát và khởi động lại ứng dụng. Tôi muốn trình bày một nút cho người dùng thực hiện điều này cho họ bởi vì nó quá phức tạp đối với người dùng bình thường để mở các quy trình đang chạy của họ và buộc bỏ ứng dụng theo cách thủ công. Mã Java để thực hiện một nút khởi động lại như thế nào?Cách buộc thoát ứng dụng Android và khởi động lại ứng dụng?

+3

Tại sao Chính xác những gì bạn cần buộc thoát và khởi động lại ứng dụng của bạn để khởi tạo mọi thứ? Chỉ cần gọi lại mã khởi tạo sau khi flash được cài đặt. –

+1

Bạn có thực sự cần phải đóng ứng dụng không? Sẽ không chỉ đóng Hoạt động đang lưu trữ WebView là đủ? – Squonk

+1

Ném ngoại lệ: P –

Trả lời

27

Bạn có thể khởi động lại ứng dụng của mình theo hai bước sau:

  1. Giết quá trình của riêng bạn. Sử dụng Process.myPid(), chuyển nó vào Process.killProcess(). Bạn có thể cần phải thêm quyền vào tệp kê khai của mình (có thể là android.permission.KILL_BACKGROUND_PROCESSES) để làm việc này.
  2. Trước khi bạn giết quá trình của riêng mình, hãy đăng ký Báo thức với mục đích đang chờ để khởi động lại Hoạt động của bạn trong tương lai rất gần. Tham số thứ hai là alarm.settriggerAtTime. Đặt nó thành 0 sẽ khiến báo thức kích hoạt ngay lập tức. Ví dụ ở đây đặt ra thời gian để khởi chạy ứng dụng một giây trong tương lai.

Bộ luật đi như thế này:

AlarmManager alm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
alm.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()), 0)); 
+0

Làm cách nào để truy cập đối tượng 'Process' này từ bên trong' Activity' chính của tôi? – JoJo

+0

Các phương pháp này trong Quy trình là tĩnh. Bạn chỉ có thể gọi cho họ. – mportuesisf

+0

Có, tính năng này hoạt động. Chúng tôi có nút quản trị thực hiện việc tắt hoàn toàn các thứ khác nhau trước khi gọi 'Process.sendSignal (Process.myPid(), Process.SIGNAL_KILL)' – jtoberon

0

Tôi cho rằng bạn có thể gọi finish để làm cho hoạt động của bạn dừng nhưng bạn sẽ không thể làm cho ứng dụng của bạn khởi động lại. Điều đó sẽ yêu cầu (nếu nó thậm chí có thể) root và nó sẽ là một ý tưởng khủng khiếp. Điều đó có nghĩa là bất kỳ ứng dụng nào cũng có thể tự khởi động bất cứ khi nào nó muốn: đó chỉ là một ý tưởng tồi và thực sự sẽ là một lỗi nếu có thể.

+0

Liệu 'Activity.finish' có thực sự buộc thoát ứng dụng không? Có vẻ như nó chỉ lưu trữ ứng dụng trong bộ nhớ. Khi tôi chạy mã, nó đã đóng ứng dụng. Nhưng khi tôi quản lý ứng dụng, nút "Buộc dừng" vẫn được kích hoạt. Nút đó sẽ bị tắt nếu ứng dụng không tìm thấy ở đâu trong bộ nhớ. Vì lý do nào đó, Flash yêu cầu ứng dụng hết bộ nhớ và sau đó khởi động lại để nó được nhận diện bởi 'WebView'. – JoJo

+0

@JoJo: Activity.finish chỉ đóng hoạt động hiện tại. Bạn đã hoàn thành tất cả các hoạt động trong ứng dụng hay chỉ một ứng dụng? Bởi vì nếu bất kỳ hoạt động hoặc quá trình nền vẫn tồn tại thì tự nhiên ứng dụng sẽ vẫn tồn tại. –

+0

Tôi đã thêm 'this.finish()' vào cuối 'Activity.onCreate'. Vì vậy, khi bạn khởi chạy ứng dụng, nó sẽ đóng ngay lập tức. Điều này có nên làm cho một hoạt động duy nhất bị đóng cửa không? – JoJo

-1

bạn có thể thoát khỏi ứng dụng với System.exit (0): này không yêu cầu sự cho phép cho ứng dụng của bạn

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