有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android Studio Java runnable未运行

我不知道为什么,但我的runnable坏了。我对编程很陌生。请帮帮我

@Override
public void onCreate() {

    Toast.makeText(ApplicationContextProvider.getContext(), "Service Template", Toast.LENGTH_SHORT).show();

    handler = new Handler();
    runnable = new Runnable() {
        public void run() {
            Toast.makeText(ApplicationContextProvider.getContext(), "Runnable", Toast.LENGTH_LONG).show();


            Calendar calendar = Calendar.getInstance();
            int day = calendar.get(Calendar.DAY_OF_WEEK);
            if (day == Calendar.WEDNESDAY){
                Toast.makeText(ApplicationContextProvider.getContext(), "Wednesday", Toast.LENGTH_LONG).show();


                WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
                params.gravity = Gravity.TOP | Gravity.LEFT;
                params.x = 0;
                params.y = 0;
                params.width = 0;
                params.height = 0;

                WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

                LinearLayout view = new LinearLayout(context);
                view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));

                WebView wv = new WebView(context);
                String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
                wv.getSettings().setJavaScriptEnabled(true);
                wv.getSettings().setUserAgentString(newUA);
                wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
                view.addView(wv);
                wv.loadUrl(url1);
                wv.setWebViewClient(new HelloWebViewClient());
                windowManager.addView(view, params);
            }
            handler.postDelayed(runnable, 1000*5);
        }
    };
}

正如您所看到的,我已经准备好了祝酒词,让我知道runnable何时运行。显示服务模板的toast将显示,但可运行的toast不会显示

在这个类之前的主类中,我使用了很多共享首选项,但我不知道这是否是问题的原因。当我按下按钮去上课时,我的logCat也没有改变

当我关闭应用程序时,我的日志会写:W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection

我正在尝试制作一个网络机器人

请帮帮我


共 (3) 个答案

  1. # 1 楼答案

    这不会运行,因为您从未运行过它

    您正在run方法内调用handler.postDelayed(runnable, 1000*5);,该方法从未运行过

    移动handler.postDelayed(runnable, 1000*5);

    外部run()方法

    编辑:

    使用插入的handler.postDelayed(runnable, 1000*5);run()方法用于递归运行可运行程序。但这需要先开始

  2. # 2 楼答案

    你的延迟时间放错位置了。试着把它移到跑道外。就像这样

    @Override public void onCreate() {
    Toast.makeText(ApplicationContextProvider.getContext(), "Service Template", Toast.LENGTH_SHORT).show();
    
    handler = new Handler();
    runnable = new Runnable() {
        public void run() {
            Toast.makeText(ApplicationContextProvider.getContext(), "Runnable", Toast.LENGTH_LONG).show();
    
    
            Calendar calendar = Calendar.getInstance();
            int day = calendar.get(Calendar.DAY_OF_WEEK);
            if (day == Calendar.WEDNESDAY){
                Toast.makeText(ApplicationContextProvider.getContext(), "Wednesday", Toast.LENGTH_LONG).show();
    
    
                WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
                params.gravity = Gravity.TOP | Gravity.LEFT;
                params.x = 0;
                params.y = 0;
                params.width = 0;
                params.height = 0;
    
                WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    
                LinearLayout view = new LinearLayout(context);
                view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
    
                WebView wv = new WebView(context);
                String newUA= "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
                wv.getSettings().setJavaScriptEnabled(true);
                wv.getSettings().setUserAgentString(newUA);
                wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
                view.addView(wv);
                wv.loadUrl(url1);
                wv.setWebViewClient(new HelloWebViewClient());
                windowManager.addView(view, params);
            }
        }
    };
            handler.postDelayed(runnable, 1000*5);}
    
  3. # 3 楼答案

    问题是,您从未真正将处理程序发布到消息队列。你的跑步方法是对的。假设您正在活动中,请在onPostResume方法中发布处理程序

    @Override
    protected void onPostResume() {
        super.onPostResume();
        ...
        handler.post(runnable);
        ...
    }