2012-04-12 35 views
10

giết Tôi đã tạo một ứng dụng Phonegap 1.5/Android.Ứng dụng Android Phonegap khởi động lại thay vì tiếp tục, mặc dù nó không bị hệ điều hành

Khách hàng của tôi báo cáo rằng, khi anh ấy rời khỏi ứng dụng bằng nút Home và sau đó khởi chạy lại ứng dụng bằng biểu tượng ứng dụng, ứng dụng sẽ khởi chạy lại từ đầu thay vì tiếp tục. Tuy nhiên, khi anh giữ nút home, ứng dụng sẽ xuất hiện trong các ứng dụng gần đây và khi anh truy cập ứng dụng thông qua menu này, ứng dụng sẽ tiếp tục theo cách dự kiến.

Tôi nghĩ rằng điều này có thể được liên kết với ứng dụng được hệ điều hành tự động đóng do thiếu bộ nhớ, nhưng nếu đó là trường hợp ứng dụng không được tiếp tục khi được nhấp trong các ứng dụng gần đây.

Tôi không thể tạo lại lỗi trên Sony Ericsson XPERIA với Android 2.3.4, ứng dụng này đã trải nghiệm hành vi này trên Motorola Defy và trên điện thoại khác (tôi sẽ thêm tham chiếu của điện thoại kia và các phiên bản hệ điều hành ngay sau khi tôi nhận được chúng).

Quá trình khởi tạo của ứng dụng được khai báo theo cách này:

window.addEventListener('load', function(){ 
     document.addEventListener('deviceready', _onDeviceReady, false); 
}, false); 

này có thể được sửa chữa bằng cách gắn các quá trình các sự kiện khác (mặc dù tôi nghi ngờ nó, ứng dụng thực sự dường như được bắt đầu lại từ đầu) ?

Có khai báo để thực hiện trong Tệp kê khai Android để ngăn chặn hành vi này không?

Đây là chữ ký hoạt động trong AndroidManifest.xml của tôi

<application android:debuggable="true" android:icon="@drawable/appicon" 
    android:label="@string/app_name" > 
    <activity android:configChanges="orientation|keyboardHidden" android:name=".MyAppActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
<activity android:name="com.phonegap.DroidGap" android:label="@string/app_name" 
      android:configChanges="orientation|keyboardHidden"> 
    <intent-filter> 
    </intent-filter> 
    </activity> 
</application> 

Có phải đó là một lỗi được biết đến trong một số điện thoại/phiên bản Android?

Chỉnh sửa: giữ nút trang chủ không hiển thị ứng dụng hiện đang chạy nhưng các ứng dụng gần đây. Tại sao hành vi trong menu đó khác với biểu tượng chính?

+0

Tôi đã thay đổi tiêu đề để rõ ràng hơn –

+0

Đây không phải là sự khác biệt giữa bắt đầu hoạt động mặc định so với mở ứng dụng (có thể từ điểm đã biết cuối cùng)? Nếu bạn có "phiên" trước đó, bạn có thể tham gia một hoạt động khác, trong khi từ trình đơn bạn bắt đầu hoạt động mặc định? Ngoài ra, tôi không nghĩ rằng bạn thấy "hiện đang chạy ứng dụng" bằng cách nhấn "nhà", bạn nên đi đến taskmanager cho điều đó. không kéo dài nhà chỉ cho bạn thấy các ứng dụng được sử dụng gần đây ", cho dù chúng vẫn chạy hay không? – Nanne

+0

Đúng vậy, trên điện thoại của tôi nhấn" nhà "mang đến cho tôi những ứng dụng gần đây. Nhưng tại sao sẽ khởi chạy từ menu này 'và không khởi chạy từ biểu tượng? Làm thế nào tôi có thể ngăn chặn biểu tượng bắt đầu hoạt động mặc định và làm cho nó tiếp tục phiên hiện tại? Tại sao hành vi sẽ khác trên điện thoại của tôi và trên điện thoại của khách hàng của tôi? Cảm ơn ... –

Trả lời

7

Bạn muốn thêm dòng sau vào thẻ hoạt động trong AndroidManifest của bạn.xml:

android:launchMode="singleTask" 

Vì vậy, nó sẽ giống như thế này:

<activity android:name="MyApp" android:label="@string/app_name" 
    android:theme="@android:style/Theme.Black.NoTitleBar" 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" 
    android:launchMode="singleTask"> 

Kiểm tra trang này để biết thêm thông tin về launchMode: http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

+1

Thực ra, nếu bạn đọc tài liệu hoạt động android, việc sử dụng singleTask dường như không được khuyến khích và thiết lập android: launchMode = "singleTop" cũng giải quyết được vấn đề. Vấn đề được mô tả bởi OP vẫn xảy ra với cordova 3.3.0 với cài đặt mặc định. Nếu android: launchMode = "singleTop" là cài đặt mặc định cho các dự án cordova mới, tôi thực sự nghĩ rằng nó có thể tiết kiệm được nhiều cơn đau đầu! – QuickFix

2

Điều này thực sự là do thiết kế trong Android, nơi hệ điều hành kiểm soát vòng đời của ứng dụng. Bạn có thể find more information here.

+3

Tôi e rằng điều này không trả lời được câu hỏi của tôi. Hệ điều hành kiểm soát vòng đời của Hoạt động, nhưng khi ứng dụng xuất hiện trong "ứng dụng đang chạy", và có thể được tiếp tục từ đó, vì vậy nó có nghĩa là hoạt động không bị giết vì thiếu bộ nhớ Nếu nó không bị giết, tại sao việc nhấp vào biểu tượng ứng dụng sẽ khởi động lại nó? mentation, bạn có thể làm nổi bật điểm mà đề với hành vi này bởi vì tôi không thể tìm thấy nó. –

3

Hey Lucas làm bạn có:

android:configChanges="orientation|keyboardHidden" 

trong thẻ hoạt động của bạn trong AndroidManifest.xml của bạn.

Như bạn đã nói điều khác có thể xảy ra là điện thoại của khách hàng của bạn sắp hết bộ nhớ và hệ điều hành đang giết ứng dụng của bạn để giải phóng bộ nhớ.

+0

Cảm ơn Simon, tôi vừa thêm phần AndroidManifest.xml của tôi vào câu hỏi. Như đã nói trong câu hỏi, nếu hệ điều hành đã giết ứng dụng, nó sẽ không thể tiếp tục từ menu "ứng dụng gần đây" ... –

+0

Bạn vẫn gặp sự cố? –

+0

Trên thực tế khách hàng cuối cùng đã thừa nhận đó là anh ta làm cho một số lỗi trong thao tác của điện thoại của mình ... Vì vậy, tôi không và chắc chắn sẽ không bao giờ biết nếu có thực sự là một số lỗi hay không ... –

-1

Tôi có một Samsung Galaxy Note II và tôi gặp phải vấn đề tương tự. Vì vậy, tôi đã sửa đổi AndroidManifest.xml và bây giờ nó hoạt động trên cả Samsung và HTC Thunderbolt.

Dưới đây là những sửa đổi:

<uses-feature android:name="android.hardware.camera" android:required="false"/> 

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="10"/> 

<activity android:configChanges="orientation|keyboardHidden" /> 
0

Give it a try ...

Sử dụng android: launchMode = "singleInstance" trong thẻ hoạt động của tệp kê khai của bạn.

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