【问题标题】:Android Start activity from timertaskAndroid 从 timertask 开始活动
【发布时间】:2012-08-30 12:08:30
【问题描述】:

您好,我有一个定时器任务,每 1 分钟检查一次文件

public class MyTimerTask extends TimerTask {
//java.io.File file = new java.io.File("/mnt/sdcard/Bluetooth/1.txt");
java.io.File file = new java.io.File("init.rc");
public void CheckTheFile() 
{
if (file.exists())
    {   
    // I want here to start the Activity GetGPS
    }
}
@Override
public void run() {
    CheckTheFile();
}

}

在检查 file.exists 时,我想要文件是否存在,活动名为 GetGPS。
谢谢。

【问题讨论】:

标签: java android schedule timertask


【解决方案1】:

在您的情况下,我建议使用 Handler 类。这就是我要做的:

private static class PromoScroller implements Runnable {

    private Handler _scrollHandler;

    public PromoScroller(Handler scrollHandler) {
        _scrollHandler = scrollHandler;
    }

    @Override
    public void run() {
        // .. 
        _scrollHandler.sendEmptyMessage(0);
    }
}

// 活动中的某处:

_promoScroller = new PromoScroller(new Handler() {
        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            // !! catch message and start the activity
            Intent = new Intent(YourCurrentActivty.this, YourTargetActivity.class);
        }
    });
    _scrollerThread = new Thread(_promoScroller);
    _scrollerThread.start();

附:这些是我用于滚动计时器的代码,但你明白了

UPD

// TASK
public class YourTimerTask extends TimerTask {
    private Handler _Handler;

    public YourTimerTask(Handler handler) {
        _Handler = handler;
    }

    public void run() {
        _Handler.sendEmptyMessage(0);
    }
}

// TASK HANDLER (private property in your acitivity)
private Handler _taskHandler = new Handler(){
    public void dispatchMessage(android.os.Message msg) {
        // do cleanup, close db cursors, file handler, etc.
        // start your target activity
        Intent viewTargetActivity = new Intent(YourCurrentActivity.this, YourTargetActivity.class);

    };
};


// IN YOUR ACTIVITY (for isntance, in onResume method)
Timer timer = new Timer();
timer.schedule(new YourTimerTask(_taskHandler), seconds*1000);

这应该可以完成工作。对于计时器 - 只需 google.timer example

UPD2

我的错误 - 应该是 Handler _timerHandler = ...。开始活动看here

【讨论】:

  • 谢谢,但是如何将处理程序与计时器任务联系起来?
  • 您可以在创建任务时传递处理程序实例。我的线程构造函数指定 Handler 存在所以你写类似于 _scrollerThread = new Thread(YOURHANDLER);在你的任务类中,你的处理程序应该有一个属性:my is `private Handler _scrollHandler;`
  • 谢谢,但你能帮我写代码吗,抱歉知识不好,但我是 Java 和 android 开发的新手,我已经从 C# .net 切换,我所做的就是创建这个类公共类 RunListener 实现 Runnable { private Handler _Handler;公共 RunListener(Handler handler) { _Handler = handler; } public void run() { _Handler.sendEmptyMessage(0); } } 请帮助我完成下一步
  • 非常感谢,但是 MyTimerTask 与一个服务相关而不是一个活动,这个服务,运行一个活动。
  • 谢谢,但这对我不起作用 :( ,服务有 onResume 方法吗?MyTimerTask 与服务无关。
【解决方案2】:

直截了当的方法:

import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import java.util.Timer;
import java.util.TimerTask;

public class SplashScreen extends AppCompatActivity {

    WebView wvMain;//This WebView will display the web address provided
    Handler handler;//This will be used in the TimerTask

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);
        handler = new Handler();

        wvMain = findViewById(R.id.wvMain);
        wvMain.setWebViewClient(new WebViewClient());
        wvMain.loadUrl("http://www.sedsworld.com/privacystatement");
        wvMain.getSettings().setJavaScriptEnabled(true);


        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {    
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        //Load second View
                        Intent intent = new Intent(SplashScreen.this, MainActivity.class);
                        startActivity(intent);
                    }
                });
            }
        };

        Timer timer = new Timer();
        timer.schedule(timerTask, 2000);//Wait 2 seconds then run the timer
    }
}

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多