程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android,线程,无法注销SensorEventListener大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Android,线程,无法注销SensorEventListener?

开发过程中遇到Android,线程,无法注销SensorEventListener的问题如何解决?下面主要结合日常开发的经验,给出你关于Android,线程,无法注销SensorEventListener的解决方法建议,希望对你解决Android,线程,无法注销SensorEventListener有所启发或帮助;

也许是一个长镜头,但我能看到的与已完成的示例以及您的示例(没有看到其他代码)不同的唯一地方是实现SensorEventListener并将其传递给注册和注销事件,而不是自定义的SensorEventListener。

看到有人通过使用New运算符实例化侦听器和似乎对他有用的答案来尝试这种方式的堆栈溢出。

public class MySensOractivity extends Activity implements SensorEventListener {


public voID onCreate(Bundle bundlE) {
        super.onCreate(bundlE);
        ...
        loopThread();
}

  private voID loopThread() {
        Boolean found = kill;
        System.out.println("LooPing until Found!");
        LOCATIOnThread = new Thread(){
                private float myacc;

                @OverrIDe
                @OverrIDe
                public voID run() {

                        while (found == false && !kill){
                                System.out.println("Another Loop!");
                                getMyLoc();
                                found = isFound(mylat,mylng,target_lat,target_lng,radius);
                                try {
                                        synchronized(LOCATIOnThread){
                                                LOCATIOnThread.wait(100);
                                        }

                                } catch (InterruptedException E) {
                                        // Todo auto-generated catch block
                                        e.printstacktrace();
                                }
                        }
                        mSensoRMANager.unregisterListener(this, mAccelerometer);
                        mSensoRMANager.unregisterListener(this, mGravitometer);
                        mSensoRMANager.unregisterListener(this);
                        LOCATIOnThread.interrupt();
                }
}

@OverrIDe
public voID onPause(){
        super.onPause();
        mSensoRMANager.unregisterListener(this, mAccelerometer);
        mSensoRMANager.unregisterListener(this, mGravitometer);
        LOCATIOnThread.interrupt();
}
@OverrIDe
public voID onResume(){
        super.onResume();
        registerSensors();
        mSensoRMANager.registerListener(this, mAccelerometer,     SensoRMANager.SENSOR_DELAY_norMAL);
        mSensoRMANager.registerListener(this, mGravitometer, SensoRMANager.SENSOR_DELAY_norMAL);
        if (true)
                loopThread();
}

private voID registerSensors() {
        mSensoRMANager =     (SensoRMANager)context.getSystemservice(Context.SENSOR_serviCE);
        List<Sensor> mySensors = mSensoRMANager.getSensorList(Sensor.TYPE_ORIENTATION);
        if(mySensors.size() > 0){
                mAccelerometer =     mSensoRMANager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
                mGravitometer =     mSensoRMANager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

                mSensoRMANager.registerListener(this, mAccelerometer, SensoRMANager.SENSOR_DELAY_norMAL);
                mSensoRMANager.registerListener(this, mGravitometer, SensoRMANager.SENSOR_DELAY_norMAL);
                Toast.makeText(context, "GetTing your LOCATIOn...", Toast.LENGTH_LONG).show();
        }
        else{
                Toast.makeText(context, "No ORIENTATION Sensor", Toast.LENGTH_LONG).show();
        }
}


 public Boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
                Intent i = new Intent(this, MFLMain.class);
                if (LOCATIOnThread != null)
                        if(LOCATIOnThread.isAlive()){

                mSensoRMANager.unregisterListener(this, mAccelerometer);
                mSensoRMANager.unregisterListener(this, mGravitometer);
                mSensoRMANager.unregisterListener(this);
                LOCATIOnThread.interrupt();
                        }
                locator.stopListener();
                kill = true;
                System.out.println("Kill the app "+kill);
                finish();
                startActivity(i);
                return false;
        }
        return super.onKeyDown(keyCode, event);
}

解决方法

public void onCreate(Bundle bundlE) {
super.onCreate(bundlE);
&Hellip;
loopThread();
}

private void loopThread() {
            Boolean found = kill;
            System.out.println("Looping until Found!");
            LOCATIOnThread = new Thread(){
                    private float myacc;

                    @Override
                    @Override
                    public void run() {

                            while (found == false && !kill){
                                    System.out.println("Another Loop!");
                                    getMyLoc();
                                    found = isFound(mylat,mylng,target_lat,target_lng,radius);
                                    try {
                                            synchronized(LOCATIOnThread){
                                                    LOCATIOnThread.wait(100);
                                            }

                                    } catch (InterruptedException E) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                    }
                            }
                            mSensoRMANager.unregisterListener(senslistener,mAccelerometer);
                            mSensoRMANager.unregisterListener(senslistener,mGravitometer);
                            mSensoRMANager.unregisterListener(senslistener);
                            LOCATIOnThread.interrupt();
                    }
}

@Override
    public void onPause(){
            super.onPause();
            mSensoRMANager.unregisterListener(senslistener,mAccelerometer);
            mSensoRMANager.unregisterListener(senslistener,mGravitometer);
            LOCATIOnThread.interrupt();
    }
    @Override
    public void onResume(){
            super.onResume();
            senslistener = new mySensorEventListener();
            mSensoRMANager.registerListener(senslistener,mAccelerometer,SensoRMANager.SENSOR_DELAY_NORMAL);
            mSensoRMANager.registerListener(senslistener,mGravitometer,SensoRMANager.SENSOR_DELAY_NORMAL);
            if (true)
                    loopThread();
    }

private void registerSensors() {
            mSensoRMANager =     (SensoRMANager)context.getSystemservice(Context.SENSOR_serviCE);
            List<Sensor> mySensors = mSensoRMANager.getSensorList(Sensor.TYPE_ORIENTATION);
            if(mySensors.size() > 0){
                    mAccelerometer =     mSensoRMANager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
                    mGravitometer =     mSensoRMANager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

                    mSensoRMANager.registerListener(senslistener,SensoRMANager.SENSOR_DELAY_NORMAL);
                    mSensoRMANager.registerListener(senslistener,SensoRMANager.SENSOR_DELAY_NORMAL);
                    Toast.makeText(context,"GetTing your LOCATIOn...",Toast.LENGTH_LONG).show();
            }
            else{
                    Toast.makeText(context,"No ORIENTATION Sensor",Toast.LENGTH_LONG).show();
            }
    }


public Boolean onKeyDown(int keyCode,KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                    Intent i = new Intent(this,MFLMain.class);
                    if (LOCATIOnThread != null)
                            if(LOCATIOnThread.isAlive()){

                    mSensoRMANager.unregisterListener(senslistener,mAccelerometer);
                    mSensoRMANager.unregisterListener(senslistener,mGravitometer);
                    mSensoRMANager.unregisterListener(senslistener);
                    LOCATIOnThread.interrupt();
                            }
                    locator.stopListener();
                    kill = true;
                    System.out.println("Kill the app "+kill);
                    finish();
                    startActivity(i);
                    return false;
            }
            return super.onKeyDown(keyCode,event);
    }

当我回击以隐藏应用程序并终止活动时,我仍然在logcat中获得system.out。剧院退出了,因为那里没有系统。我很困惑,我不认为范围不是问题,因为SensoRMANager是通过init方法实例化的。

大佬总结

以上是大佬教程为你收集整理的Android,线程,无法注销SensorEventListener全部内容,希望文章能够帮你解决Android,线程,无法注销SensorEventListener所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。