添加 Azure 后端 table 查询时应用冻结
App freeze when adding azure backend table query
开门见山,这是我的代码:
private MobileServiceClient mClient;
private MobileServiceTable<tblClass> mTable;
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().hide();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if( getIntent().getBooleanExtra("Exit me", false)){
finish();
return;
}
try {
mClient = new MobileServiceClient(
"https://applink.azurewebsites.net",
this
);
mTable = mClient.getTable(tblClass.class);
// when this line added, the app freezes, with no information on the logcat
List<tblClass> results = mTable
.execute()
.get();
// end of the line
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (MobileServiceException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我已经尝试使用此方法将 return 数据添加到列表中
Toast.makeText(this, results.indexOf(0), Toast.LENGTH_SHORT).show();
结果还是一样,应用卡住了
我已经尝试在许多 android 版本(从 4.4 到 7.0)上调试它,有人能告诉我为什么会这样吗?我一个月才学会 android。
更新
这是应用冻结前的最后一个logCat
07-30 01:50:30.168 24014-24014/id.co.mandiri.e_absenmandiri I/InstantRun: starting instant run server: is main process
07-30 01:50:30.332 24014-24014/id.co.mandiri.e_absenmandiri W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-30 01:50:30.604 24014-24027/id.co.mandiri.e_absenmandiri I/art: Background sticky concurrent mark sweep GC freed 1973(388KB) AllocSpace objects, 0(0B) LOS objects, 20% free, 1579KB/1983KB, paused 5.293ms total 20.441ms
您 运行 在负责 UI 更新的主线程中查询(换句话说,长时间运行)。您需要使用 AsyncTask、Loaders 或简单地创建一个新的 Thread 实现来启动另一个线程。
开门见山,这是我的代码:
private MobileServiceClient mClient;
private MobileServiceTable<tblClass> mTable;
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().hide();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if( getIntent().getBooleanExtra("Exit me", false)){
finish();
return;
}
try {
mClient = new MobileServiceClient(
"https://applink.azurewebsites.net",
this
);
mTable = mClient.getTable(tblClass.class);
// when this line added, the app freezes, with no information on the logcat
List<tblClass> results = mTable
.execute()
.get();
// end of the line
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (MobileServiceException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我已经尝试使用此方法将 return 数据添加到列表中
Toast.makeText(this, results.indexOf(0), Toast.LENGTH_SHORT).show();
结果还是一样,应用卡住了 我已经尝试在许多 android 版本(从 4.4 到 7.0)上调试它,有人能告诉我为什么会这样吗?我一个月才学会 android。
更新
这是应用冻结前的最后一个logCat
07-30 01:50:30.168 24014-24014/id.co.mandiri.e_absenmandiri I/InstantRun: starting instant run server: is main process
07-30 01:50:30.332 24014-24014/id.co.mandiri.e_absenmandiri W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-30 01:50:30.604 24014-24027/id.co.mandiri.e_absenmandiri I/art: Background sticky concurrent mark sweep GC freed 1973(388KB) AllocSpace objects, 0(0B) LOS objects, 20% free, 1579KB/1983KB, paused 5.293ms total 20.441ms
您 运行 在负责 UI 更新的主线程中查询(换句话说,长时间运行)。您需要使用 AsyncTask、Loaders 或简单地创建一个新的 Thread 实现来启动另一个线程。