Android 应用程序中的全局活动上下文
我正在尝试根据一些事件在我的应用程序中实现通知。除了触发通知所需的活动上下文之外,一切都很好 我有一个方法在非活动类中进行一些计算,然后通过传递上下文调用notification类,但它似乎工作不好,或者我做了一些错误的事情 这是我的密码 活动课Android 应用程序中的全局活动上下文,android,android-activity,android-context,Android,Android Activity,Android Context,我正在尝试根据一些事件在我的应用程序中实现通知。除了触发通知所需的活动上下文之外,一切都很好 我有一个方法在非活动类中进行一些计算,然后通过传递上下文调用notification类,但它似乎工作不好,或者我做了一些错误的事情 这是我的密码 活动课 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.
@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;
我正在通过signalton或静态方法尝试这两种方法
这是我的信号灯
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";
}
公共类监听{
公开监听(活动活动、阵列列表数据){
这个。活动=活动;
this.allData=new ArrayList();
this.allData=数据;
createNotification();
}
public void createNotification(){
通知相容建筑商mBuilder=
新建NotificationCompat.Builder(活动)
.setSmallIcon(R.drawable.ic_stat)
.setContentTitle(“新数据”).setColor(Color.RED)
.setContentText(类型+“:”+值);
NotificationCompat.InboxStyle InboxStyle=新NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle(“新细节”);
对于(int i=0;i
所以重要的是,我不知道如何在notification类中获取sActivity上下文,我尝试了signalton和through sActivity.get()静态方法,但当应用程序被破坏,且通知条件为true时,应用程序崩溃。当应用程序不在前台时,应用程序崩溃,只有服务正在运行 您可能希望尝试传入
服务
:
public void createNotification(Context context){
...
}
您始终可以使用全局应用程序上下文,通过调用
getApplicationContext()
可以从活动或服务中获取全局应用程序上下文。您可以将此上下文
传递给创建通知的类
删除所有的单身垃圾。这是不必要的,只会导致内存泄漏。持有活动上下文的静态引用是非常错误的。也许您应该重新考虑设计方法。是否有任何建议以干净的方式进行…?您应该能够将服务上下文传递给通知。服务上下文?但是如何创建呢?如果要从服务而不是从活动创建通知,请传入服务。服务是一个上下文。