Android 应用程序在后台时崩溃
我从API中获取数据,并将其显示在Android 应用程序在后台时崩溃,android,android-viewpager,Android,Android Viewpager,我从API中获取数据,并将其显示在ViewPager中,然后用计时器自动滑动ViewPager,当我将应用程序放在后台并再次打开它时,它崩溃了 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{317597f7 V.ED.... R......D 0,0-160,160} not attached to window manager
ViewPager
中,然后用计时器自动滑动ViewPager
,当我将应用程序放在后台并再次打开它时,它崩溃了
java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{317597f7 V.ED.... R......D 0,0-160,160} not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:396)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:322)
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116)
at android.app.Dialog.dismissDialog(Dialog.java:341)
at android.app.Dialog.dismiss(Dialog.java:324)
at com.example.app.fragments.LatestNewsFragment$3.onSuccess(LatestNewsFragment.java:178)
at com.example.app.fragments.LatestNewsFragment$3.onSuccess(LatestNewsFragment.java:126)
at com.example.app.tools.connection.ServerTool$4.onSuccess(ServerTool.java:202)
at com.example.app.tools.connection.ServerTool$4.onSuccess(ServerTool.java:197)
at com.example.app.tools.connection.RetrofitTool$APICallBack.onResponse(RetrofitTool.java:71)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
这是崩溃的代码片段
private void getLastNews() {
if (dialogLoading == null) {
dialogLoading = new LoadingDialog().showDialog(getActivity());
}
ServerTool.getLastNews(getActivity(), new ServerTool.APICallBack<List<NewsListModel>>() {
@Override
public void onSuccess(List<NewsListModel> response) {
Log.d("response list", response.size() + "");
newsList = response;
NewsPagerAdapter helpAdapter = new NewsPagerAdapter(getActivity(), newsList);
viewPagerImage.setAdapter(helpAdapter);
timer = new Timer();
viewPagerImage.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position < newsList.size()) {
if (position < currentPage) {
currentPage--;
} else {
currentPage++;
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
timer.schedule(new TimerTask() {
@Override
public void run() {
if (getActivity() == null)
return;
if (isAdded())
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (currentPage < newsList.size()) {
viewPagerImage.setCurrentItem(currentPage++, true);
} else {
currentPage = 0;
viewPagerImage.setCurrentItem(currentPage, true);
}
}
});
}
}, 300, 2500);
if (dialogLoading.isShowing()) {
dialogLoading.dismiss();
}
}
@Override
public void onFailed(int statusCode, ResponseBody responseBody) {
Log.d("onFailed", responseBody + "");
if (dialogLoading.isShowing()) {
dialogLoading.dismiss();
}
}
});
}
private void getLastNews(){
如果(dialogLoading==null){
dialogLoading=新建LoadingDialog().showDialog(getActivity());
}
ServerTool.getLastNews(getActivity(),新的ServerTool.APICallBack(){
@凌驾
成功时公共无效(列表响应){
Log.d(“响应列表”,response.size()+”);
新闻列表=响应;
NewsPagerAdapter帮助适配器=新的NewsPagerAdapter(getActivity(),newsList);
viewPagerImage.setAdapter(帮助适配器);
定时器=新定时器();
viewPagerImage.addOnPageChangeListener(新的ViewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
}
@凌驾
已选择页面上的公共无效(内部位置){
if(位置
Add(dialogLoading!=null&&dialogLoading.isShowing())
,然后关闭对话框。一旦活动被隐藏,Android操作系统将立即销毁该活动。因此,需要在onDestroy的yout活动中解除dismissDialog
@Override
protected void onDestroy() {
dialogLoading.dismiss();
super.onDestroy();
}
我们可以知道
LatestNewsFragment.java
的第178行是什么吗?它是dialogLoading.Disclease();我懂了。然后您应该添加一个空检查对话框加载=在对话框加载.isShowing()之前为null
。让我们知道这是否有效?:)还是一样的崩溃