有没有机会在新线程中简单地调用方法?
Is there any chance to simply call method in new thread?
我的问题是,当我 运行 android 应用程序时,如果打印机处于离线状态,此方法需要一分钟才能 运行。我想 运行 它在后台的另一个线程上,并且原始线程可以 运行 不间断。感谢您的任何建议,祝编码愉快!
public class MainActivity extends WebView {
public PrinterManager printerManager;
public final int REQUEST_COARSE_LOCATION_PERMISSIONS = 52;
private JSPlugin plugin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mBluetoothReceiver, filter);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION_PERMISSIONS: {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//printerManager.connectDefaultPrinter(0);
//printerManager.connectDefaultPrinter(1);
printerManager.connectAll(); <----- This method call i want to do in new thread
} else {
Toast.makeText(this,
"NO Bluetooth RIGHTS",
Toast.LENGTH_LONG).show();
}
return;
}
}
}
您可以简单地创建一个 Thread 对象并将您的方法放入其中。
这里的代码适用于您的案例:
public class MainActivity extends WebView {
public PrinterManager printerManager;
public final int REQUEST_COARSE_LOCATION_PERMISSIONS = 52;
private JSPlugin plugin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mBluetoothReceiver, filter);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION_PERMISSIONS: {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
ConnectingThread connectingThread = new ConnectingThread();
connectingThread.start();
} else {
Toast.makeText(this, "NO Bluetooth RIGHTS", Toast.LENGTH_LONG).show();
}
return;
}
}
}
private class ConnectingThread extends Thread {
public ConnectingThread() {
}
public void run() {
// You can set a low priority, if you want, using:
//Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
printerManager.connectAll();
}
}
}
根据您的管理需要,您可以决定将connectingThread 的定义放在不同的位置。
我的问题是,当我 运行 android 应用程序时,如果打印机处于离线状态,此方法需要一分钟才能 运行。我想 运行 它在后台的另一个线程上,并且原始线程可以 运行 不间断。感谢您的任何建议,祝编码愉快!
public class MainActivity extends WebView {
public PrinterManager printerManager;
public final int REQUEST_COARSE_LOCATION_PERMISSIONS = 52;
private JSPlugin plugin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mBluetoothReceiver, filter);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION_PERMISSIONS: {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//printerManager.connectDefaultPrinter(0);
//printerManager.connectDefaultPrinter(1);
printerManager.connectAll(); <----- This method call i want to do in new thread
} else {
Toast.makeText(this,
"NO Bluetooth RIGHTS",
Toast.LENGTH_LONG).show();
}
return;
}
}
}
您可以简单地创建一个 Thread 对象并将您的方法放入其中。
这里的代码适用于您的案例:
public class MainActivity extends WebView {
public PrinterManager printerManager;
public final int REQUEST_COARSE_LOCATION_PERMISSIONS = 52;
private JSPlugin plugin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mBluetoothReceiver, filter);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_COARSE_LOCATION_PERMISSIONS: {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
ConnectingThread connectingThread = new ConnectingThread();
connectingThread.start();
} else {
Toast.makeText(this, "NO Bluetooth RIGHTS", Toast.LENGTH_LONG).show();
}
return;
}
}
}
private class ConnectingThread extends Thread {
public ConnectingThread() {
}
public void run() {
// You can set a low priority, if you want, using:
//Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
printerManager.connectAll();
}
}
}
根据您的管理需要,您可以决定将connectingThread 的定义放在不同的位置。