Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使此应用程序更高效?_Java_Android_Eclipse_Bluetooth - Fatal编程技术网

Java 如何使此应用程序更高效?

Java 如何使此应用程序更高效?,java,android,eclipse,bluetooth,Java,Android,Eclipse,Bluetooth,我有下面的代码,没有任何错误,但我得到了这个 Skipped 116 frames. The application may be doing too much work on its main thread. 当我按下单个按钮并执行init方法时,就会发生这种情况 如何在另一个线程中执行该方法,使其不会像那样中断 package com.apppppp.pampam; import java.io.IOException; import java.io.InputStream; impor

我有下面的代码,没有任何错误,但我得到了这个

Skipped 116 frames. The application may be doing too much work on its main thread.
当我按下单个按钮并执行init方法时,就会发生这种情况

如何在另一个线程中执行该方法,使其不会像那样中断

package com.apppppp.pampam;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Set;

import android.support.v7.app.ActionBarActivity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.ParcelUuid;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {

    Button singleButton;
    BluetoothAdapter mBluetoothAdapter;
    BluetoothAdapter blueAdapter ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);

        blueAdapter = BluetoothAdapter.getDefaultAdapter();

        singleButton = (Button) findViewById(R.id.button1);



        setButtonOnClickListeners();


        return true;
    }

    private void setButtonOnClickListeners(){

        singleButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {

                try {
                    write("Salut");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    System.out.println("No luck");
                }
            }
        });
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

        private OutputStream outputStream;
        private InputStream inStream;

        private void init() throws IOException {
            if (blueAdapter != null) {
                if (blueAdapter.isEnabled()) {
                    Set<BluetoothDevice> bondedDevices = blueAdapter.getBondedDevices();
                    System.out.println(bondedDevices);

                    if(bondedDevices.size() > 0){
                        Iterator iter = bondedDevices.iterator();

                        BluetoothDevice device = (BluetoothDevice) iter.next(); 
                        ParcelUuid[] uuids = device.getUuids();
                        BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuids[0].getUuid());
                        socket.connect();
                        outputStream = socket.getOutputStream();
                        inStream = socket.getInputStream();
                    }
                    else{
                        Log.e("error", "No appropriate paired devices.");
                        }
                }else{
                    Log.e("error", "Bluetooth is disabled.");
                }
            }
        }


        public void write(String s) throws IOException{
            init();
            outputStream.write(s.getBytes());
        }

        public void run() {
            final int BUFFER_SIZE = 1024;
            byte[] buffer = new byte[BUFFER_SIZE];
            int bytes = 0;
            int b = BUFFER_SIZE;

            while (true) {
                try {
                    bytes = inStream.read(buffer, bytes, BUFFER_SIZE - bytes);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
}

谢谢您

您正在UI线程上执行与蓝牙相关的调用,并且您通过这些调用阻止了UI线程。

尝试检查完整的android Bluetooth,了解如何在其他线程中使用蓝牙套接字…我会这样做。谢谢:我已经读过关于阻止UI线程的内容。。但我不知道如何修改应用程序以在不阻止的情况下拨打这些电话。miselking发布了bt示例的链接。我看到了他的帖子,但我在该页面上浏览了几次,我不知道如何将我的代码与之结合。我最终会xD