应用中的全球活动背景

时间:2015-01-04 22:06:07

标签: android android-activity android-context

我正在尝试根据某些事件在我的应用中实施通知。一切都很好,除了我需要触发通知的活动的上下文。

我有一个方法在非活动类中进行一些计算,然后我通过传递上下文来调用通知类,但它看起来效果不好或者我做错了。

这是我的代码

活动类

 @Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_s);
    acti = sActivity.this;
    sSingleton.getInstance().init(sActivity.this);
  }
public static sActivity get(){
   return acti;
 }
 sActivity acti = null;

我正在通过信号或静态方法尝试两种方法

这是我的信号器

    public class sSingleton {
    private static  sActivity appContext;

    private sSingleton(){}

    public void init(sActivity context){
        if(appContext == null){
            appContext = context;
        }
    }

    public static sActivity getContext(){
        return appContext;
    }

    public static sActivity get(){
        return getInstance().getContext();
    }

    private static sSingleton instance;

    public static sSingleton getInstance(){
        return instance == null ?
                (instance = new sSingleton()):
                instance;
    }
}

我的通知类

    public class sNotification {

    public sNotification(sActivity activity, ArrayList<String> data) {
        this.activity = activity;
        this.allData = new ArrayList<String>();
        this.allData = data;
        createNotification();
    }

    public void createNotification(){
          NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(activity)
                        .setSmallIcon(R.drawable.ic_stat)
                        .setContentTitle("New Data").setColor(Color.RED)
                        .setContentText(type + " : "+ value);
        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
        inboxStyle.setBigContentTitle("New Details");
        for(int i = 0; i < allData.size(); i++){
            inboxStyle.addLine(type + ": "+ value);
        }
        Intent notificationIntent = new Intent(sSignalton.get(), sActivity.class); //crashing here
               notificationIntent.putExtra("Notification", "Notify");
        PendingIntent contentIntent = PendingIntent.getActivity(sSignalton.get(), 0, notificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setStyle(inboxStyle);
        mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
        mBuilder.setContentIntent(contentIntent);

        // Add as notification
        NotificationManager manager = (NotificationManager) sApplication.get().getSystemService(sActivity.get().NOTIFICATION_SERVICE);
        manager.notify(001, mBuilder.build());
    }

    sActivity activity;
    public static String TAG = "sNotification";
}

所以重要的是我不知道如何在通知类中获取sActivity上下文,我尝试了signalton和sActivity.get()静态方法,但是当应用程序被销毁,并且通知条件变为真时应用程序崩溃。当应用程序不在前台时,应用程序崩溃,只有服务正在运行。

2 个答案:

答案 0 :(得分:0)

您可能想尝试传递Service

public void createNotification(Context context){
...
}

答案 1 :(得分:0)

您始终可以使用全局应用程序上下文,您可以通过调用ActivityServicegetApplicationContext()获取该上下文。您可以将此Context传递给创建Notifications

的类

删除所有单身废话。这不是必要的,只是会造成内存泄漏。