我使用涉及2个进程的应用程序时遇到了实际问题。一个进程执行服务(p1),另一个进程执行GUI(p2)。
我在p2中有一个类,它实现了一个对象(iThing)的使用,它是自定义内存管理(及其静态)。它必须像Android操作系统的实现一样,只要他想要破坏视图。
public class Connections{
public static int iGlobalCounter=0;
public static Object iThing;
public static void start(){
iGlobalCounter++;
Log.d("PROCESS", "UP: "+iGlobalCounter);
if (iGlobalCounter<=1){
//Create the object "iThing"
}
}
public static int stop(){
iGlobalCounter--;
Log.d("PROCESS", "DOWN: "+iGlobalCounter);
if (iGlobalCounter<=0){
//Destroy the object "iThing"
}
}
}
主GUI(在p2中),启动和停止onCreate / onDestroy上的变量(对于我的应用中的所有视图)
public class MyMainClass extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Connections.start();
}
@Override
public void onDestroy(){
super.onDestroy();
Connections.stop();
}
}
最后在p1中我有了服务,它也需要变量,所以,它做同样的
public class MyMainService extends Service{
@Override
public void onCreate() {
super.onCreate();
Connections.start();
}
@Override
public void onDestroy(){
super.onDestroy();
Connections.stop();
}
}
问题是,如果我只使用p2(GUI),它会很顺利,但是当我执行服务时(在p1中),计数器不会从最后一个状态增加,而是从0增加,导致破坏离开服务时的对象,而不是应用程序。
如果进行此导航,我会得到以下计数器: MyMainClass(1) - &gt; OtherClass(2) - &gt; AnotherClass(3) - &gt; MyMainService ( 1 )
我的问题是,是否有一种拥有多进程全局变量的方法?因为似乎每个进程都有自己的静态变量而不是“真正的静态”。一个解决方案可能是使用SharedPreferences来保存状态,但不是很好的解决方案,因为它在离开应用程序时无法保存。
谢谢, PAU
答案 0 :(得分:1)
我认为您应该延长Application
课程并将globalVariable
放在那里。
答案 1 :(得分:0)
您可以将全局数据存储在共享内存中(请参阅MemoryFile)。 为了同步对文件的访问,我认为最好的方法是使用相同的内存文件实现某种自旋锁。 在案例中,我不知道这样做的简单方法。
答案 2 :(得分:0)
您可以查看以下选项,以便在不同进程之间共享数据,
消息队列,
命名管道,
内存映射文件
命名管道或MSMQ上的WCF