我的加载屏幕很少有TextField,当加载屏幕创建时它会启动新线程。该线程有 3 件事要做,1)为扫描类创建新对象并运行它的扫描方法 2)在扫描方法中如果它变得棘手,它应该使用setStatus更新状态,然后调用方法 updateWidget 但它返回“ android.view.View android.view.Window.findViewById(int)' 在空对象引用上“和 3) 使用 setPackages 返回所有包。那么我如何从线程中获取小部件,还有关于我提到的第 3 部分的额外问题是正确的方法吗?
public class LoadingScreen extends Activity {
private String status="";
List<ApplicationInfo> packages;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loadingscreen_layout);
updateWidget();
try {
startLoadingScreen();
}catch (Exception e){
Log.e("Scanner","Scanner",e);
}
}
public void startLoadingScreen(){
new Thread(new Runnable() {
@Override
public void run() {
Scanner scanner = new Scanner();
setPackages(scanner.Scan());
changeIntent();
finish();
}
});
}
public void setStatus(String status) {
this.status = status;
}
void updateWidget(){
TextView scanStatus = findViewById(R.id.statusView);
scanStatus.setText(status);
}
private void changeIntent(){
Intent intent = new Intent(this,DisplayClass.class);
startActivity(intent);
}
public void setPackages(List<ApplicationInfo> packages) {
this.packages = packages;
}
}
扫描类
public class Scanner extends Activity{
private LoadingScreen loadingScreen = new LoadingScreen();
List <android.content.pm.ApplicationInfo> Scan(){
loadingScreen.setStatus("Scanning");
loadingScreen.updateWidget();
final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
return packages;
}
}