古いプロジェクトのメンテナンスが 2021 年 7 月 30 日の直前に受け取られたことが記録されています。
これには周辺機器接続 (タブレットは Jiabo メーカーの計量機に接続されています) が含まれており、データはリアルタイムでタブレットに返される必要があります。ディスプレイ用。問題は、データが返されるのが速い場合と遅い場合があるため、1 つずつ確認するしかないことです。
AS を開き、タブレットを接続し、ログを確認します。この異常をブラッシングし終えることさえできません。
...
java.lang.NullPointerException: Attempt to invoke virtual method 'int com.gprinter.io.PortManager.readData(byte[])' on a null object reference
at com.hycashier.devicelibrary.helper.BluetoothHelper$4.run(BluetoothHelper.java:198)
java.lang.NullPointerException: Attempt to invoke virtual method 'int com.gprinter.io.PortManager.readData(byte[])' on a null object reference
at com.hycashier.devicelibrary.helper.BluetoothHelper$4.run(BluetoothHelper.java:198)
java.lang.NullPointerException: Attempt to invoke virtual method 'int com.gprinter.io.PortManager.readData(byte[])' on a null object reference
at com.hycashier.devicelibrary.helper.BluetoothHelper$4.run(BluetoothHelper.java:198)
...
このブロックのコードは次のようになります。
/**
* 接收数据的方法
*/
public void startReceiveData(){
receiveFlag = true;
/*创建子线程接收串口数据
*/
receiveThread = new Thread(){
@Override
public void run() {
while (receiveFlag){
try {
serialData = "0".getBytes();
byte[] readData = new byte[1024];
int size = portManager.readData(readData);
byte[] realReadData = new byte[size];
System.arraycopy(readData,0,realReadData,0,size);
if (size>0&&receiveFlag) {
serialData = realReadData;
}
getMainHandler().sendEmptyMessage(receiveFlagWhat);
Thread.sleep(intervalTime);
} catch (Exception e){
e.printStackTrace();
}
}
}
};
//启动接收线程
receiveThread.start();
}
デバッグを通じて、portManager が空であることがわかりました。新しいアクティビティを開き続けると、リアルタイム データを取得するために再びここにアクセスし、CPU が急上昇します...つまり、新しい子が作成されるたびに
、データを取得して (このタブレットのパフォーマンスは 5 ~ 6 年前の構成にすぎません)、空ではない判定を試すことしかできません。
/**
* 接收数据的方法
*/
public void startReceiveData(){
receiveFlag = true;
/*创建子线程接收串口数据
*/
receiveThread = new Thread(){
@Override
public void run() {
while (receiveFlag && portManager!=null){
try {
serialData = "0".getBytes();
byte[] readData = new byte[1024];
int size = portManager.readData(readData);
byte[] realReadData = new byte[size];
System.arraycopy(readData,0,realReadData,0,size);
if (size>0&&receiveFlag) {
serialData = realReadData;
}
getMainHandler().sendEmptyMessage(receiveFlagWhat);
Thread.sleep(intervalTime);
} catch (Exception e){
e.printStackTrace();
}
}
}
};
//启动接收线程
receiveThread.start();
}
個人テストは成功し、少なくとも CPU が削減されました。