如何在 Android 中处理过多的 Activity?
Posted
技术标签:
【中文标题】如何在 Android 中处理过多的 Activity?【英文标题】:How to handle too much Activites in Android? 【发布时间】:2012-01-03 04:14:40 【问题描述】:我正在使用 VideoView 在我的应用中播放视频,因此我需要为每个视频创建大量活动。我的问题是,有没有办法处理这个?因为到目前为止我已经创建了 100 多个活动。我不希望我的应用因为太多的活动而变得太大。
【问题讨论】:
为什么要为每个视频创建活动。只需传递链接并在活动中使用一个视频视图并导航视频“下一个”/“上一个”。 你有这方面的教程吗? Leon,无意冒犯,但基于这个问题,很明显你还没有准备好编写商业级软件。向 android 市场发布另一个半功能的、实施得非常糟糕、漏洞百出的应用程序并没有给任何人带来任何好处。请考虑花必要的时间来学习如何在 Android 和 Java 中正确地进行架构设计。鉴于您所描述的内容,您的应用听起来最多应该是 2 或 3 个活动(如果布局合理,1 个可能就足够了)。 Dr.Dredel,无意冒犯,但您甚至无法自己找到解决方案,但您告诉我“最多 2 或 3 次活动(如果您躺着,1 次可能就足够了)它正确)”这就是为什么我问这样我可以学习。 另外,我还没有发布任何应用程序,我只是在学习 【参考方案1】:好吧,老实说,大多数开发人员必须在功能和低内存占用之间进行权衡。最好的实现是牢记各种活动状态。阅读它here
这是你能做到的最好的事情。当其他活动应用需要资源时,Android 将始终“杀死”在后台运行的活动。
【讨论】:
所以你是说没办法? 一点也不。正确管理活动状态通常可以完成。 “管理活动状态”是什么意思? 您是否阅读了该链接中的页面?您会发现主题标题下涵盖了这些内容:“活动生命周期” 这可能有助于“杀死”活动,但它无助于使我的应用在尺寸方面更小,这是我的主要问题,你有点跑题了【参考方案2】:这是在单个活动中导航下一个/上一个视频的代码。喜欢播放列表。
public class Test11Activity extends Activity
private int currentVideo=0;
ArrayList<String> httpLinkArrayList = new ArrayList<String>();
VideoView videoView;
Button n_button;
Button p_button;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
httpLinkArrayList.add("http://abb.mp4");
httpLinkArrayList.add("http://abb1.mp4");
httpLinkArrayList.add("http://abb2.mp4");
httpLinkArrayList.add("http://abb3.mp4");
httpLinkArrayList.add("http://abb4.mp4");
LinearLayout mainlayout = new LinearLayout(this);
mainlayout.setOrientation(LinearLayout.VERTICAL); 线性布局 n_p_layout = new LinearLayout(this);
n_button = new Button(this);
n_button.setText("Next");
n_button.setOnClickListener(new OnClickListener()
@Override
public void onClick(View arg0)
// TODO Auto-generated method stub
if(currentVideo<httpLinkArrayList.size())
currentVideo++;
videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
videoView.start();
);
p_button = new Button(this);
p_button.setText("Previous");
p_button.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
if(currentVideo>0)
currentVideo--;
videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
videoView.start();
);
n_p_layout.addView(n_button);
n_p_layout.addView(p_button);
videoView = new VideoView(this);
videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
videoView.start();
videoView.setOnCompletionListener(new OnCompletionListener()
@Override
public void onCompletion(MediaPlayer arg0)
// TODO Auto-generated method stub
if(currentVideo<httpLinkArrayList.size())
currentVideo++;
videoView.setVideoURI(Uri.parse(httpLinkArrayList.get(currentVideo)));
videoView.start();
);
mainlayout.addView(n_p_layout);
mainlayout.addView(videoView);
setContentView(mainlayout);
希望对你有用。:)
【讨论】:
mainlayout 是简单的线性布局。您可以根据需要设置其属性。 怎么没有控件? 检查现在编辑的代码。只是缺少 mainlayout 方向 vertical.mainlayout 包含下一个前一个控件和视频视图。【参考方案3】:@Leon 你可以使用视图翻转器
这可能对你有帮助
http://www.bogotobogo.com/Android/android9TabWidgetFlipper.html#SlidingDrawer
http://www.warriorpoint.com/blog/2009/05/29/android-switching-screens-by-dragging-over-the-touch-screen/
【讨论】:
他将很难在视图鳍状肢中进行 100 多项活动。 ;-)以上是关于如何在 Android 中处理过多的 Activity?的主要内容,如果未能解决你的问题,请参考以下文章
android logcat中不显示log.d我的程序代码中包含Log.d(TAG,"activi
如何在 Android 中正确使用 AsyncTask [关闭]
无法运行应用程序,“处理的输出过多” - Android Studio
Ambiguous method call. Both findViewById (int) in AppCompatActivity and findViewById (int) in Activi