簡體   English   中英

Android Studio Java Runnable未運行

[英]Android Studio Java runnable not running

我不知道為什么,但是我的跑步機無法正常工作。 我對編程非常陌生。 請幫我。

@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);
        }
    };
}

如您所見,我設置了一個Toast,讓我知道可運行對象何時運行。 顯示服務模板的Toast出現了,但是可運行的Toast卻沒有出現。

在該課程之前的主課程中,我使用了很多共享的首選項,但我不知道這是否可能是問題的原因。 當我按下按鈕進入該課程時,我的logCat也不會更改。

當我關閉應用程序時,我的logcat會寫: W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection

我正在嘗試制作一個網絡機器人。

請幫我。

您的postDelay位置錯誤。 嘗試將其移動到運行之外。 像這樣

@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);}

這將不會運行,因為您永遠不會運行它

您正在調用handler.postDelayed(runnable, 1000*5); 在永遠不會運行的運行方法中。

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

外部run()方法

編輯:

使用handler.postDelayed(runnable, 1000*5); 可以使用run()方法來遞歸運行runnable。但是需要首先啟動它。

問題是您實際上從未將處理程序發布到消息隊列中。 您的運行方法是正確的。 假設您處於活動狀態,則將處理程序發布在onPostResume方法中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM