2010-08-02 39 views
14

Tôi có dịch vụ tạo thông báo và sau đó cập nhật thông tin đó với một số thông tin nhất định theo định kỳ. Sau khoảng 12 phút, điện thoại bị treo và khởi động lại, tôi tin rằng đó là do rò rỉ bộ nhớ trong mã sau để thực hiện với cách tôi cập nhật thông báo, có thể ai đó vui lòng kiểm tra/tư vấn cho tôi nếu trường hợp này xảy ra đang làm sai.rò rỉ bộ nhớ android trong dịch vụ thông báo

onCreate:

mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

createNotification:

private void createNotification() { 
    Intent contentIntent = new Intent(this,MainScreen.class); 
    contentIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent appIntent =PendingIntent.getActivity(this,0, contentIntent, 0); 

    contentView = new RemoteViews(getPackageName(), R.layout.notification); 
    contentView.setImageViewResource(R.id.image, R.drawable.icon); 
    contentView.setTextViewText(R.id.text, ""); 

    notification = new Notification(); 
    notification.when=System.currentTimeMillis(); 
    notification.contentView = contentView; 
    notification.contentIntent = appIntent; 
} 

updateNotification:

private void updateNotification(String text){ 
    contentView.setTextViewText(R.id.text, text); 
    mNotificationManager.notify(0, notification); 
} 

Cảm ơn trước.

+0

Vui lòng đăng một số quyền của Logcat trước khi khởi động lại – smith324

+0

Chỉ GC trở nên lớn hơn và lớn hơn cho đến khi nó gây ra sự cố và bắt đầu tiêu diệt và khởi động lại – stealthcopter

+0

Đảm bảo rằng ứng dụng đó chắc chắn là ứng dụng của bạn. Hãy thử gỡ cài đặt hoàn toàn và xem liệu nó có xảy ra hay không. Có thể là một số ứng dụng khác mà bạn đã cài đặt gần đây. – Moncader

Trả lời

9

Tôi tình cờ gặp phải vấn đề tương tự. Dường như nếu bạn không "cache" RemoteView và Notification trong dịch vụ, nhưng tạo lại chúng từ đầu trong thói quen "update" thì vấn đề này sẽ biến mất. Có, tôi biết nó không hiệu quả, nhưng ít nhất điện thoại không khởi động lại do lỗi bộ nhớ.

+0

Hmmm lạ, tôi sẽ cố gắng sau ngày nghỉ lễ để xác nhận. – stealthcopter

+0

Điều này dường như hoạt động, theo như tôi có thể nói. – Timmmm

+0

Xin chào, tôi đang cập nhật Chế độ xem từ xa của thông báo (chính xác 3 lần xem văn bản bên trong nó) liên tục (sau mỗi giây) bằng dịch vụ. Chiếc điện thoại bị siêu chậm và đóng băng sau một thời gian. Tôi có nên tạo lại thông báo cho vấn đề này không? – berserk

2

Tôi gặp vấn đề tương tự. Giải pháp của tôi gần với giải pháp mà @haimg đã nói, nhưng tôi nhớ lưu thông báo (chỉ là RemoteView được tạo lại). Bằng cách đó, thông báo sẽ không nhấp nháy một lần nữa nếu bạn đang xem nó.

Ví dụ:

public void createNotification(Context context){ 
    Notification.Builder builder = new Notification.Builder(context); 

    // Set notification stuff... 

    // Build the notification 
    notification = builder.build(); 
} 

public void updateNotification(){ 
    notification.bigContentView = getBigContentView(); 
    notification.contentView = getCompactContentView(); 

    mNM.notify(NOTIFICATION_ID, notification); 
} 

Và trong các phương pháp getBigContentViewgetCompactContentView tôi trả lại một mới RemoteViews với cách bố trí được cập nhật.