在线程中启动线程是一种好习惯吗?我搜索过但没有找到太多信息.
我有一个TimerTask,它在某个时间每天都会获得一个用户列表.然后我想获得一些关于用户的数据,但这需要用户输入.因为它需要用户输入,所以我不希望在用户没有响应的情况下阻止我的TimerTask线程.例如,列表中的第一个用户可能无法在X时间内响应,我不想等待X时间,直到我向第二个用户询问他们的数据,依此类推.所以在我的TimerTask中,我创建并启动一个新的Thread来获取数据.这样,在Y时间内,如果我收到了一些数据(但不是全部),我仍然可以做其他事情,而不是等待每一个完成.
做上述事情是好的做法吗?还有更好的解决方案吗?
这是一些可以帮助您理解的psudeo代码.
class UserThread extends TimerTask {
@Override
public void run() {
log.debug("Get a list of members!");
List<String> users = userManager.getUsers();
retrieveInitialData(users);
}
public void retrieveInitialData(List<String> users) {
for(String user : users) {
new Thread(new GetData(user)).start();
}
}
addToSuccessList(String user) {
synchronized(successList) {
successList.add(user);
}
}
addToFailureList(String user) {
synchronized(failureList) {
failureList.add(user);
}
}
class GetData extends Thread {
String userID;
public GetData(String user) {
this.userID = user;
}
public void run() {
try {
dataManager.getData(user);
addToSuccessList(user);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Object字段封送Object(可以是多种类型的类).然后我将使用套接字发送生成的XML.我的代码如下;
我要上课的班级
public class Message {
private String metadata;
private Object payload;
public Message(String metadata,Object payload)
{
this.metadata=metadata;
this.payload=payload;
}
public Message() {
}
public String getMetadata() {
return metadata;
}
public void setMetadata(String metadata) {
this.metadata = metadata;
}
public Object getPayload() {
return payload;
}
public void setPayload(Object payload) {
this.payload = payload;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何试图编组它的片段.
private Message sendData;
...
JAXBContext jc = JAXBContext.newInstance(sendData.getClass());
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
JAXBElement<Message> rootElement = new JAXBElement<Message>(
new QName(sendData.getClass().getSimpleName()), dataClass, …Run Code Online (Sandbox Code Playgroud) 我一直在开发一个应用程序,它使用 NFC 标签来发挥一些魔力。
一切都很好,直到最近我更改了一些与之前有效的 NFC 代码无关的代码。
当我通过 NFC 点击启动我的应用程序时,一切正常,当我在应用程序运行时点击时,我将在 onNewIntent() 中收到未来的 NFCTag。
当我通过图标启动应用程序并尝试在应用程序运行时点击时,我的 onNewIntent() 方法会被调用,但是当我尝试从意图中获取 NFCTag 作为额外内容时,它会返回 null。
我是否正确地认为,即使它为空,自从我的 onNewIntent() 被调用以来我已经正确设置了 ForegroundDispatch ?
这是代码...
protected void onResume() {
if(this.mNfcAdapter==null) {
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
}
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter nfcFilter = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
nfcFilter.addDataType("application/application.myorg.myapp");
} catch (MalformedMimeTypeException e) {
Log.e(TAG, "Error Setting FD for NFC", e);
}
String[][] mTechLists = new String[][] { new String[] { NfcF.class.getName() } };
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, new IntentFilter[] …Run Code Online (Sandbox Code Playgroud)