从通知启动主屏幕时出现 ANR

如何解决从通知启动主屏幕时出现 ANR

我对 android 开发世界还很陌生,也很天真。我正在解决我们的 android 应用程序中的一个现有问题,到目前为止我还没有解决它。我很抱歉问了一个冗长的问题。

在当前用于跟踪店主是否开店或关店的应用中,我们显示一个通知用户可以点击该通知(当应用未在前台打开时)并从“值班”到“值班”。如果用户关闭了定位服务并且用户尝试点击从“Duty Off”到“Duty On”的通知,系统会尝试获取用户的纬度和经度,发出 POST 标注并打开应用程序主屏幕。当应用程序主屏幕打开时,用户看到应用程序无响应错误。这只发生在用户关闭他们的位置的情况下。

下面是我的代码片段,它是发生此操作时调用的类,它主要负责 2 个方法 createNotification 和 fun_DutyONOFF。自己在谷歌上搜索了很多,似乎如果 broadcastReceiver 在 10 秒内没有完成,Android 会抛出 Application Not Responding (ANR)。但我不确定这里的替代方案是什么,如果关闭定位服务,为什么会出现 ANR?任何帮助都可以挽救生命,因为我花了 3 天时间却没有运气。

public class SwitchButtonListenerON extends broadcastReceiver {
//Class variable declaration that I have omitted
@Override
    public void onReceive(Context context,Intent intent) {
        if ("dutyON".equalsIgnoreCase(intent.getAction())) {
            SharedPrefrence_Login.getDataLogin(context);
            location_update = new Location_Update(context);
            createNotification(context);
//This is probably the method "fun_DutyONOFF" that takes more time but I am not sure how to replace the work done by this method
            fun_DutyONOFF("1",SharedPrefrence_Login.getMhawker_code(),context);
        }
    }
private void createNotification(final Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        mChannel = new NotificationChannel(CHANNEL_ID,"Hawker",notificationmanager.IMPORTANCE_HIGH);
    }
    Intent notificationIntent = new Intent(context,Home.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context,notificationIntent,0);

    Intent dutyIntent = new Intent("action.cancel.notification");
    PendingIntent pendingDutyIntent = PendingIntent.getbroadcast(context,dutyIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    RemoteViews notificationView = new RemoteViews(context.getPackageName(),R.layout.notification_layout);
    //the intent that is started when the notification is clicked (works)
    Notification notification = new NotificationCompat.Builder(context,CHANNEL_ID)
            .setContentTitle("Location Service")
            .setContentText("")
            .setSmallIcon(R.drawable.ic_business)
            .setContentIntent(pendingIntent)
            .setongoing(true)
            .build();
    notification.contentView = notificationView;
    notification.contentIntent = pendingDutyIntent;
    notification.flags |= Notification.FLAG_NO_CLEAR;
    notificationView.setonClickPendingIntent(R.id.closeDuty,pendingDutyIntent);
    notificationmanager mnotificationmanager = (notificationmanager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        mnotificationmanager.createNotificationChannel(mChannel);
        mnotificationmanager.notify(1,notification);
    }else {
        mnotificationmanager.notify(1,notification);
    }
}

private void fun_DutyONOFF(final String sstatus,final String hawker_code,final  Context context) {
    requestQueue = VolleySingleton.getInstance(context).getRequestQueue();
    StringRequest stringRequest = new StringRequest(Request.Method.POST,Urls.URL_DUTY_ON_OFF_SELLER,new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        // _progressDialog.dismiss();
                        // converting response to json object
                        JSONObject obj = new JSONObject(response);
                        String str = obj.getString("data");
                        JSONObject jsoObject = new JSONObject(str);
                        strStatus  = jsoObject.getString("status");
                        strActive_status = jsoObject.getString("active_status");
                        strActive_msg = jsoObject.getString("active_message");
                        if(strStatus.equals("1")){
                           // System.exit(0);
                            Intent intent = new Intent(context,Home.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK );
                            context.startActivity(intent);
                            createNotification(context);
                        }

                    } catch (JSONException e) {
                        e.printstacktrace();
                    }
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //      _progressDialog.dismiss();
                    if (error.getClass().equals(TimeoutError.class)) {
                        CallbackSnakebarModel.getInstance().SnakebarMessage(context,"It took longer than expected to get the response from Server.",MessageConstant.toast_warning);
                    }else {
                        CallbackSnakebarModel.getInstance().SnakebarMessage(context,"Server Respond Error! Try Again Later",MessageConstant.toast_warning);
                    }      }
            }) {
        @Override
        protected Map<String,String> getParams() throws AuthFailureError {
            Map<String,String> params = new HashMap<>();
            params.put("hawker_code",hawker_code);
            params.put("longitude",location_update.LONGITUDE);
            params.put("latitude",location_update.LATTITUDE);
            params.put("duty_status",sstatus);
            params.put("notification_id",SharedPrefrence_Login.getPnotification_id());
            return params;
        }
    };
    stringRequest.setRetryPolicy(new DefaultRetryPolicy(20000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    VolleySingleton.getInstance(context).addToRequestQue(stringRequest);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?