****DataBaseUpdateService.java****public class DataBaseUpdateService extends Activity { @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Updatetask Task = new Updatetask(this.getApplicationContext()); if(Task.getStatus() == AsyncTask.Status.PENDING){ Task.execute();}; } @OverrIDe public voID onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @OverrIDe public voID onPause() { super.onPause(); } @OverrIDe public voID onResume() { super.onResume(); }}
================================================== ========================
****AndroIDmanifest.xml**** <activity androID:name=".DataBaseUpdateService" androID:configChanges="keyboardHIDden|orIEntation"/>
这些代码与androID 3.x或更低版本完美匹配.但是,它不能正常工作的androID 4.x.
你有什么问题吗?
解决方法 解决方案1 – 如果您真的需要一个AsyncTask,请考虑两次.解决方案2 – 将AsyncTask放入片段.
解决方案3 – 锁定屏幕方向
解决方案4 – 防止活动重新创建.
参考:http://androidresearch.wordpress.com/2013/05/10/dealing-with-asynctask-and-screen-orientation/
…..
发生问题的原因是当配置更改时重新创建活动,如方向更改等.
您可以锁定asyntask的onPreExecuted()方法中的方向更改,并在onPostExecuted()方法中解锁它.
import androID.app.Activity;import androID.content.Context;import androID.content.pm.ActivityInfo;import androID.content.res.Configuration;import androID.os.AsyncTask;import androID.Widget.button;import androID.Widget.Progressbar;public class MyAsyncTask extends AsyncTask<VoID,Integer,VoID> {private Context context;private Progressbar progressbar;private button button;public MyAsyncTask(Progressbar progressbar,Context context,button button){ this.context=context; this.progressbar=progressbar; this.button=button;}private voID lockScreenorIEntation() { int currentOrIEntation =context.getResources().getConfiguration().orIEntation; if (currentOrIEntation == Configuration.ORIENTATION_PORTRAIT) { ((Activity) context).setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { ((Activity) context). setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }}private voID unlockScreenorIEntation() { ((Activity) context). setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);}@OverrIDeprotected voID onPreExecute() { // Todo auto-generated method stub super.onPreExecute(); progressbar.setMax(100); button.setEnabled(false); lockScreenorIEntation();}@OverrIDeprotected VoID doInBackground(VoID... params) { // Todo auto-generated method stub for(int i=0;i<=100;i++){ try { Thread.sleep(200); } catch (InterruptedException e) { // Todo auto-generated catch block e.printstacktrace(); } publishProgress(i); }return null; }@OverrIDeprotected voID onProgressUpdate(Integer... values) { // Todo auto-generated method stub super.onProgressUpdate(values); progressbar.setProgress(values[0]);}@OverrIDeprotected voID onPostExecute(VoID result) { // Todo auto-generated method stub super.onPostExecute(result); button.setEnabled(true); unlockScreenorIEntation();}}总结
以上是内存溢出为你收集整理的如果在android 4.x中运行合成模式,则如何处理屏幕方向更改全部内容,希望文章能够帮你解决如果在android 4.x中运行合成模式,则如何处理屏幕方向更改所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)