标签: android-handler

单独线程中的 Android 传感器 registerListener

我写了一个服务来记录后台的加速度计值。这个想法是注册传感器侦听器并将值写入存储。我已经启用了StrictMode.enableDefaults()MainActivity应用程序(不在服务)的检查,如果在自己的线程在服务运行。但事实并非如此!我不知道是什么问题......我有这个AsyncTask类,我希望解决这个问题,但它显然没有(这是在服务内部,它的执行方法是从服务的方法中调用onCreate的。

private class LogTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... voids) {

        mListener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {

                String formatted = String.valueOf(System.currentTimeMillis())
                        + "\t" + String.valueOf(sensorEvent.timestamp)
                        + "\t" + String.valueOf(sensorEvent.values[0])
                        + "\t" + String.valueOf(sensorEvent.values[1])
                        + "\t" + String.valueOf(sensorEvent.values[2])
                        + "\r\n";

                //if (mIsServiceStarted && mFileStream != null && mLogFile.exists()) {
                if (mFileStream != null && mLogFile.exists()) {

                    try {
                        mFileStream.write(formatted.getBytes());
                    } catch (IOException e) { …
Run Code Online (Sandbox Code Playgroud)

java android android-service android-asynctask android-handler

2
推荐指数
1
解决办法
3132
查看次数

实现处理程序的基本方法

好的,所以我已经阅读了许多关于处理程序的教程和线程,但是他们似乎对我自己的处理程序知识更加先进,这是我第一次使用处理程序这么光顾我.我在处理程序上有这个示例应用程序,它在某个时间触发Log,但是当我点击我的开始按钮时它似乎无法正常工作.以下是我的代码.

public class Main extends Activity {
    private long selectedTimeInMills;
    private Handler handler;
    private static final Calendar CALENDAR = Calendar.getInstance();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TimePicker timepicker = (TimePicker) findViewById(R.id.timePicker1);
        final TextView timeText = (TextView) findViewById(R.id.time);

        Button start = (Button) findViewById(R.id.button1);
        handler = new Handler();
        String textTime = formatDate(CALENDAR.getTimeInMillis(), "hh:mm a");
        timeText.setText(textTime);

        timepicker.setOnTimeChangedListener(new OnTimeChangedListener() {

            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                CALENDAR.set(Calendar.HOUR_OF_DAY, hourOfDay);
                CALENDAR.set(Calendar.MINUTE, minute);
                selectedTimeInMills = CALENDAR.getTimeInMillis();
                String textTime = formatDate(CALENDAR.getTimeInMillis(), "hh:mm a"); …
Run Code Online (Sandbox Code Playgroud)

android android-handler

1
推荐指数
1
解决办法
370
查看次数

消息处理程序和WeakReference问题

以下消息处理程序可以很好地从我的服务接收消息...

private  Handler handler = new Handler() 
{

    public void handleMessage(Message message) 
    {
        Object path = message.obj;

        if (message.arg1 == 5 && path != null)  //5 means its a single mapleg to plot on the map
        {
            String myString = (String) message.obj;
            Gson gson = new Gson();
            MapPlot mapleg = gson.fromJson(myString, MapPlot.class);
            myMapView.getOverlays().add(new DirectionPathOverlay(mapleg.fromPoint, mapleg.toPoint));
            mc.animateTo(mapleg.toPoint);

        }
        else
        {
            if (message.arg1 == RESULT_OK && path != null) 
            {
                Toast.makeText(PSActivity.this, "Service Started" + path.toString(), Toast.LENGTH_LONG).show();
            } 
            else 
            {
                Toast.makeText(PSActivity.this,"Service error" + …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks android-handler

1
推荐指数
1
解决办法
3392
查看次数

如何在android中停止Handler

我已经创建了一个Android应用程序,当一个按钮点击处理程序时,将每隔2秒激活一个烤面包机.同样在另一方面,我有一个停止按钮,我想从中停止点击正在运行的线程

这是我的代码

private final int  FIVE_SECONDS = 2000;


    public void scheduleSendLocation() {
        handler.postDelayed(new Runnable() {
            public void run() {
                sendLocation();          // this method will contain your almost-finished HTTP calls
                handler.postDelayed(this, FIVE_SECONDS);
            }
        }, FIVE_SECONDS);
    }


    protected void sendLocation() {
        Toast.makeText(getApplicationContext(), "Your Location is ", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
        stop = (Button) findViewById(R.id.stop);

        btnShowLocation.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {        
                scheduleSendLocation();

            }
        });

        stop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) …
Run Code Online (Sandbox Code Playgroud)

android handler android-handler

1
推荐指数
1
解决办法
5699
查看次数

在 Java 中重新启动 handler.postDelayed

@Override
public void onUserInteraction() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable () {
        public void run() {
            finish();
        }
    }, 5000);
    handler.removeCallbacks(null);
}
Run Code Online (Sandbox Code Playgroud)

我试图在调用 OnCreate 方法时运行处理程序。然后,当我收到用户交互时,我想取消处理程序并再次调用它(重新启动处理程序)。

我该怎么做?

提前致谢

java android android-handler

1
推荐指数
1
解决办法
4298
查看次数

调用removeCallbacks后,runnable中的asynctask不会停止

我有一个名为myAsync的asynctask,它执行一些网络操作(从服务器获取数据,并解析json).

一旦活动运行,我也会创建一个处理程序.

我也有一个runnable,我运行asynctask.我使用runnable的原因是因为我将在Handler的postdelayed方法中使用它,因为我希望每1分钟重复一次.

Runnable runnable = new Runnable()
{
    public void run()
    {
        new myAsync ().execute();
    }
};
Run Code Online (Sandbox Code Playgroud)

然后我在onResume中使用上面的runnable;

@Override
protected void onResume()
{
    super.onResume();
            handler.postDelayed(runnable, 60000);
    }
Run Code Online (Sandbox Code Playgroud)

每当我离开活动时,我都希望支票停止,所以我打电话给,

 handler.removeCallbacks(runnable);
Run Code Online (Sandbox Code Playgroud)

然而,asynctask继续不停地运行.我该怎么办 ?

android android-asynctask android-handler

0
推荐指数
1
解决办法
1489
查看次数

处理程序无法实例化

Handler类发生了什么事.为什么它向我展示这种类型的错误?我可以通过调用Handler覆盖方法来解决它.但我不想要他们.我该怎么办.

public class MainActivity extends Activity {


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

}

private void blink(){
    final Handler handler = new Handler(); //showing error and need to call their override methods. 
    new Thread(new Runnable() {
        @Override
        public void run() {
            int timeToBlink = 1000;    //in milissegunds
            try{Thread.sleep(timeToBlink);}catch (Exception e) {}
            handler.post(new Runnable() {
                @Override
                public void run() {
                    TextView txt = (TextView) findViewById(R.id.blink);
                    if(txt.getVisibility() == View.VISIBLE){
                        txt.setVisibility(View.INVISIBLE);
                    }else{
                        txt.setVisibility(View.VISIBLE);
                    }
                    blink();
                }
            });
        }
    }).start();
} …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-handler android-studio

0
推荐指数
1
解决办法
1477
查看次数

使用UI线程改进2个回调问题

我正在制作一个简单的材料设计登录屏幕,显示进度对话框,同时改造正在获取数据.

我最近升级到改装2,所以我对此很新.

我的LoginActivity代码:

private void login(){
        Log.d(TAG, "Attempting login");

        if(!validate()){
            onLoginFailure();
            return;
        }

        login_button.setEnabled(false);

        progressDialog = new ProgressDialog(LoginActivity.this, R.style.AppTheme_Dark_Dialog);
        progressDialog.setIndeterminate(true);
        progressDialog.setMessage("Authenticating...");
        progressDialog.show();

        String username = _usernameText.getText().toString().toLowerCase(); //all usernames are lowercase only
        String password = _passwordText.getText().toString();

        //here we handle the NWL section.

        startTime = System.currentTimeMillis();
        NWL.login(username, password, this); //This runs async to UI anyway.
    }
Run Code Online (Sandbox Code Playgroud)

和LoginActivity中的其他功能:

@BindView(R.id.login_button)
Button login_button;

 public void loginOK() {
        progressDialog.dismiss();
        login_button.setEnabled(true);
        toastCreator.showToastLong("Login OK");
        Log.d(TAG, "Total time: " + (System.currentTimeMillis()-startTime));
 }
Run Code Online (Sandbox Code Playgroud)

我的NetworkLogic(NWL)类的代码:

public void login(String username, String password, …
Run Code Online (Sandbox Code Playgroud)

android ui-thread android-handler retrofit2

-2
推荐指数
1
解决办法
3229
查看次数