我有一个应用程序,用户可以使用操作栏项将任何片段中的图像视图设置为壁纸。我正在使用以下代码:
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case R.id.action_wall:
{
WallpaperManager wm=WallpaperManager.getInstance(getActivity().getApplicationContext());
try{
wm.setBitmap(bmg1);
Toast.makeText(getActivity().getBaseContext(), "Wallpaper set successfully",Toast.LENGTH_SHORT).show();
}
catch(IOException e)
{
Toast.makeText(getActivity().getBaseContext(), "Wallpaper not set successfully",Toast.LENGTH_SHORT).show();
}
}
}
return false;
}
我面临的问题是,当用户点击菜单项时,应用会挂起几秒钟,然后再显示吐司和设置壁纸。我知道我们可以使用异步任务来解决这个问题,虽然我不确定它是如何在这里使用的。请帮我解决这个问题。感谢
编辑: 这是我的异步任务代码:
class ImageTask extends AsyncTask<Void, Void, Void>
{
Context c;
ProgressDialog pd;
public ImageTask(Context ctx)
{
this.c=ctx;
}
@Override
protected void onPreExecute()
{
pd=ProgressDialog.show(c, "Please Wait", "Setting Wallpaper...");
}
public void onPostExecute()
{
pd.dismiss();
Toast.makeText(c, "Wallpaer set successfully", Toast.LENGTH_SHORT).show();
}
protected Void doInBackground(Void... params) {
WallpaperManager wm1=WallpaperManager.getInstance(c);
try {
wm1.setBitmap(ImageFrag1.bmg1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
return null;
}
}
答案 0 :(得分:0)
据我所知,设置位图图像需要花费很多时间来强制应用程序挂起。最好在任何并行线程而不是ui线程中执行此操作。 您需要初始化AsyncTask并需要在switch语句中调用execute()方法。 您需要在AsyncTask的doInBackground方法中执行该行。 例如,试试这个..
private addImageTask mAddBitMap;
mAddBitMap.execute();
private class addImageTask extends AsyncTask<String, Void, Void> {
protected void onPreExecute() {
}
@Override
protected Void doInBackground(String... arg0) {
addBitMap();
return null;
}
protected void onPostExecute(Void unused) {
try {
} catch (Exception e) {
Log.e(TAG, "Exception", e);
}
}
}
private void addBitMap(){
WallpaperManager wm=WallpaperManager.getInstance(getActivity().getApplicationContext());
try{
wm.setBitmap(bmg1);
Toast.makeText(getActivity().getBaseContext(), "Wallpaper set successfully",Toast.LENGTH_SHORT).show();
}
catch(IOException e)
{
Toast.makeText(getActivity().getBaseContext(), "Wallpaper not set successfully",Toast.LENGTH_SHORT).show();
}
}