不断更新通知

时间:2017-06-06 18:29:55

标签: java android android-notifications java-threads

您好,我是Android开发的新手,正在努力学习它! 我只是想在我的应用程序中用Java Thread更新我的通知(我只是在学习并且好奇我该怎么做)。

我有一个活动,一个增加Integer值的简单线程。然后,我只想在整数值递增时在我的通知中显示它! 我的代码如下:

    public class MainActivity extends Activity{
        private final String LOG_KEY = this.getClass().getSimpleName();
        private int c = 0;
        private boolean flag = true;
        private NotificationCompat.Builder builder;
        private NotificationManager notificationManager;

        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            builder = new NotificationCompat.Builder(MainActivity.this)
               .setSmallIcon(R.mipmap.ic_launcher)
               .setAutoCancel(false);

            builder.setOngoing(true);

            notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

            Thread t = new Thread(new MyThread());
            t.start();
        }//OnCreate ends

        @Override
        protected void onStop() {
            super.onStop();
            flag = false;
        }//stop ends

        @Override
        protected void onDestroy() {
            super.onDestroy();
            flag = false;
        }//destroy ends

        private class MyThread implements Runnable {
            @Override
            public void run() {
                while (flag) {
                    c+=1;
                    showNotification(Integer.toString(c) + " Counts");
                }//while ends
            }//run ends

            private void showNotification(String msg) {
                try {
                    //set the notification
                    builder.setContentText(msg);
                    notificationManager.notify(0, builder.build());
                } catch (Exception exp) {
                    Log.e("xmn", exp.toString());
                }//try catch ends
            }//showNotification ends

        }//private class ends
    }//MainActivity class ends here 

从我的代码开始,会显示通知并更新值!但问题是它会突然冻结设备和应用程序!

我只是想帮助我做错了,因为我是一个新手,并且自己学习。任何帮助和想法将受到高度赞赏!

由于

2 个答案:

答案 0 :(得分:0)

您不应该创建通知,然后在线程中尽可能快地更新通知。它真的不是为此设计的。

我能想到的最符合您用例的是使用通知来显示进度。看到这个链接:

Displaying Progress in a Notification

您可能希望在线程中设置某种速率限制器,除非您希望计数非常快地达到非常高的数量。也许让线程在更新之间暂停一段时间。

答案 1 :(得分:0)

问题在于您生成的通知数量超过设备可以使用的数量。

为了您的目标(只是学习),您可以在通知之间添加一些暂停:

 boolean videoPlay=false;
 webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public Bitmap getDefaultVideoPoster() {
       super.getDefaultVideoPoster();
       videoPlay=true; 
       Log.d("vplayyyyyyyy",String.valueOf(videoPlay));
       return null;
    }
 });