我有一个具有互联网连接服务的android应用。每当应用程序联机或脱机时,该服务都会显示一个小吃栏。 服务运行良好,但是访问MainActivity的快餐栏或显示快餐栏的相对布局时,我会得到空值。下面是后台服务回调的实现,此方法写在mainactivity内:
public void hasInternetConnection() {
if (!hasInternetMessageShown) {
showSnackBar("App is online", false);
}
}
private void showSnackBar(String message, boolean shouldStick) {
if (snack != null && snack.isShown()) {
snack.dismiss();
}
snack = Snackbar.make(rootView, message, Snackbar.LENGTH_SHORT);
snack.getView().setBackgroundColor(activity.getResources().getColor(R.color.blue_light));
TextView textView = snack.getView().findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(activity.getResources().getColor(R.color.orange));
Typeface typeface = ResourcesCompat.getFont(activity, R.font.semibold);
textView.setTypeface(typeface, Typeface.NORMAL);
if (shouldStick)
snack.setDuration(BaseTransientBottomBar.LENGTH_INDEFINITE);
snack.show();
}
以上代码仅在我将点心和活动实例保持静态的情况下有效。我不想这样做,因为它会触发内存泄漏。请在这里帮助我,以便我可以有效地处理此问题。
谢谢!
答案 0 :(得分:2)
请尝试通过您的服务发送有关活动的本地广播,然后尝试更新小吃店。
答案 1 :(得分:2)
public class UpdaterApplication extends Application {
public void onCreate() {
super.onCreate();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
loadDataFromServer();
}});
thread.start();
}
private void loadDataFromServer() {
// ...
// load data from server
// this could take some time
// ...
// How do we update the current activity?
}
}
请注意,我们必须添加该行
android:name="UpdaterApplication"