簡體   English   中英

Android待處理的意圖問題和全局類

[英]Android pending intents issue and global class

因此,我的應用程序具有多個活動。

其中之一顯示消息列表(從本地SQLite檢索)。

我也有一個GlobalClass來擴展Application,並使用它來在活動之間存儲一些值。 像這樣:

import android.app.Application;

public class GlobalClass extends Application {
private String uzid;
...
public String getUzer() {
    return uzid;
}

public void setUzer(String aUzer) {
    uzid = aUzer;
}

我的應用程序當然有一個登錄頁面,用戶在訪問該應用程序之前會先對其進行身份驗證。 當他這樣做時,我在GlobalClass中使用記錄的用戶的ID號設置了一個userId整數。 到現在為止,還沒有幻想。

我還有一個同步適配器,用於檢查遠程服務器上的新消息並同步2個表(本地和遠程)。 當同步適配器在遠程服務器上找到新消息時,它將生成一個Android通知。 當用戶單擊通知時,我的應用程序打開,帶有收件箱的活動顯示所有消息。

我注意到,即使我啟動應用程序時,我的globalClass用戶ID有時還是空的,即使不進行設置也無法通過登錄活動。 因此,應用程序絕對設置了此globalClass值。

所以我的猜測是,當單擊我的android通知並顯示帶有消息列表的活動時,將以某種方式重新初始化globalClass?!?!?!?!!

有什么方法可以確保不會發生這種情況?

我確實需要我的用戶能夠使用該應用程序,就像他通過單擊通知從通知欄啟動它時從未發生過一樣。 我的意思是,用戶登錄后,設置了GlobalClass userId,然后該應用程序繼續運行。 在進入暫停狀態的aa后,顯示屏將關閉,然后出現新消息並顯示通知。 用戶單擊它,我的應用程序將返回顯示消息的顯示屏,但userId現在為null。 為什么? 以及如何預防呢?

當在syncAdapter中發現新消息時,這是顯示通知的方式:

        Intent intent = new Intent(context, MesajeActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(context, i, intent, PendingIntent.FLAG_UPDATE_CURRENT); //(context, 0, intent, 0);
        // Build notification
        Notification noti = new Notification.Builder(context)
                .setContentTitle("Message from "+ self.getSursanume())
                .setContentText(self.getTitlu()).setSmallIcon(R.drawable.new_50)
                .setContentIntent(pIntent)
                .build();
        NotificationManager notificationManager;
        notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        // hide the notification after its selected
        noti.flags |= Notification.FLAG_AUTO_CANCEL;
        noti.defaults |= Notification.DEFAULT_VIBRATE;
        noti.sound = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.htc4);
        noti.number = i;
        notificationManager.notify(i, noti);

怎么了 我使用當前用戶ID(在GlobalClass中找到)來標識針對當前用戶的消息,因此在onCreate和onResume中,我實例化GlobalClass並檢索用戶ID。 但這會使我的應用程序崩潰。 因為有時從通知進入應用程序時,我的全局變量“ userID”為NULL。

我該如何解決這個問題?

謝謝

我注意到,即使我啟動應用程序時,我的globalClass用戶ID有時還是空的,即使不進行設置也無法通過登錄活動。 因此,應用程序絕對設置了此globalClass值。

首先,您的應用程序可能沒有啟動來啟動活動(例如,應用程序開始向服務發送命令)。

其次,您的應用可能無法啟動以啟動您的登錄活動(例如,用戶從“最近任務”列表中回到了您身邊)。

所以我的猜測是,當單擊我的android通知並顯示帶有消息列表的活動時,將以某種方式重新初始化globalClass?!?!?!?!!

您的過程在兩次調用之間被終止。 這是完全正常的

有什么方法可以確保不會發生這種情況?

並不是的。 出於各種原因(例如崩潰,用戶手動終止),進程在所有操作系統上始終會消失。

我確實需要我的用戶能夠使用該應用程序,就像他通過單擊通知從通知欄啟動它時從未發生過一樣。

然后,您將需要保留數據。 靜態數據成員(包括自定義Application對象) 只是一個cache

或者,不是進行“登錄活動”,而是在需要身份驗證時在您的任何活動中顯示它的某種片段。

或者,將您的Notification路由轉到“登錄活動”,這將確定不需要身份驗證並將用戶轉發到最終目的地。 如果需要OTOH進行身份驗證,則“登錄活動”將進行處理, 然后將用戶轉發到最終目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM