我有活动A,用作vpnService B和C类中的上下文。 vpnService B有一个在VPN启动时启动的线程。因此,在应用程序终止后,它会继续运行。我的问题是,当B和C想要访问时,A的上下文是否仍然可以被访问?我是否必须将上下文本身绑定到服务以保留值?我提供了一个代码格式的示例,以进一步解释我的问题。
另外,B扩展了vpnService。因此,当以编程方式禁用VPN或通过用户禁用VPN时,它仍会通过onDestroy()
public class A extend Activity(){
private static aContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_A);
aContext = A.this;
//vpn service starts
//assume that the user alerts to allow it have already been implemented
Intent myIntent = new Intent(A.this, B.class);
startService(myIntent);
}
static Context getContext() {
return aContext;
}
}
/**
* Would I still be able to access the context from A on B and C after the application ends?
* i.e. when the user dismisses it from the app drawer?
*/
public class B extends vpnService {
private ScheduledExecutorService ex;
private static C cRef;
Runnable aThread = new Runnable() {
@Override
public void run() {
C.doStuff();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
ex = Executors.newSingleThreadScheduledExecutor();
//new thread every second
ex.scheduleAtFixedRate(aThread, 0, 1, TimeUnit.SECONDS);
return START_NOT_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
//shutd down the executor
ex.shutdownNow();
}
}
public class C{
public void doStuff(){
A.getContext();
}
}
答案 0 :(得分:1)
我认为不是。这种架构似乎很奇怪。有很多地方可以面对内存泄漏。 将静态范围中的Context,Activity,Fragment等类型设置为错误是完全错误的。 你应该修改你的任务并改变架构。
顺便说一下,如果你需要C.class中的Context,你可以从你的服务nor-Activity获取getContext()。
希望这对你有所帮助。