Piren, 

Thanks for taking the time to respond. I was able to figure out the problem…but 
I can confirm that Thread with sleep is bad. Handler is the right approach — I 
had something (not obvious) several layers deep in the call chain which was 
causing the problem. 

Thanks again for your help. 

Cheers, 

Brad

On Nov 10, 2013, at 12:55 AM, Piren <[email protected]> wrote:

> I've done it and have had no issues what so ever (using a surfaceview).
> 
> Regarding your code, your first approach (thread with sleep) is horrible, 
> don't ever do that for any reason :) The second approach is the correct one 
> which i have used myself with no issues.
> 
> Since i see no reason why it would affect your playback like so, i suggest 
> you just profile your app and see exactly what calls cause the slowdown. 
> 
> On Saturday, November 9, 2013 5:03:07 AM UTC+2, Brad OHearne wrote:
> Wasn’t able to get a response on this after a few days, so perhaps I’ll try 
> to frame it another way. If you: 
> 
> - Have created custom controls for a video player 
> 
> - Are familiar with the proper / conventional approach to updating UI 
> controls every second / sub-second as in these kinds of apps: stopwatch, 
> clock with second hand, video player with seek bar, music player, etc. 
> 
> - Have done any background threading with regular updates to UI controls 
> 
> I would love to hear from you on what worked for you, or even if you couldn’t 
> get it working, what did not work for you. Any information at this point will 
> help narrow down the problem — the use case is very simple — update the play 
> time on a video player every second without killing the streaming video 
> performance. 
> 
> I would love to hear from you. 
> 
> Thanks, 
> 
> Brad 
> 
> On Nov 4, 2013, at 2:56 PM, Bradley O'Hearne <[email protected]> 
> wrote: 
> 
> > Hey there, 
> > 
> > I hope everyone’s week is off to a good start! 
> > 
> > I have a pretty simple use case: I am playing video streamed across the 
> > network in an app, and I need to update two SeekBars every second, one 
> > which tracks the video’s timecode while playing, and the other which tracks 
> > the device volume. Simple enough, gun up a background thread, and update 
> > both every second (given that to my knowledge, I can’t have the system call 
> > a listener specific to either of those functions. In a nutshell, the video 
> > streams just fine when this control-updating thread isn’t running, but when 
> > it is running, the video is so chunky and slow, and audio garbled, that it 
> > isn’t watchable. 
> > 
> > First, the video display is accomplished using a TextureView in combination 
> > with a MediaPlayer (the reason is that the TextureView allows scrolling / 
> > movement, SurfaceView does not). Second, I have tried a couple of different 
> > approaches for the background thread: 
> > 
> > a) I have tried a Runnable in a new Thread which updates the SeekBar 
> > controls inside of a runOnUIThread — this keeps a looping background thread 
> > and updates the controls on the UI thread, as such: 
> > 
> > new Thread(new ManagementRunnable()).start(); 
> > ... 
> > public class ManagementRunnable implements Runnable 
> > { 
> >        public void run() 
> >        { 
> >            try 
> >            { 
> >                updateControlState(); 
> >                 Thread.sleep(1000); 
> >            } 
> >            catch (Exception ex) 
> >            { 
> >                ex.printStackTrace(); 
> >            } 
> >        } 
> > } 
> > ... 
> > public void updateControlState() 
> > { 
> >       runOnUiThread(new Runnable() 
> >       { 
> >            public void run() 
> >            { 
> >                 // update the timecode SeekBar 
> >                 ... 
> >                // update the volume SeekBar 
> >                 ... 
> >            } 
> >         } 
> > } 
> > 
> > b) I have also tried using a Handler, where it runs on the UI thread, as 
> > such: 
> > 
> > new Handler().post(new ManagementRunnable()); 
> > ... 
> > public class ManagementRunnable implements Runnable 
> > { 
> >        public void run() 
> >        { 
> >            try 
> >            { 
> >                updateControlState(); 
> >                handler.postDelayed(this, 1000); 
> >            } 
> >            catch (Exception ex) 
> >            { 
> >                ex.printStackTrace(); 
> >            } 
> >        } 
> > } 
> > 
> > public void updateControlState() 
> > { 
> >         // update the timecode SeekBar 
> >         ... 
> >        // update the volume SeekBar 
> >         ... 
> > } 
> > 
> > The problem is, the result is the same regardless of which approach is 
> > taken — the video is unwatchable. I have tested this on a Samsung Galaxy S2 
> > Skyrocket, and in the simulator. I’ve Googled this a fair amount, and it 
> > appears that the approaches above are generally the recommended approach. 
> > While video decoding and playing isn’t exactly a cheap operation, I’m a 
> > little surprised that accommodating a once-per-second update brought the 
> > app to its knees, given nothing else taking place in the app. 
> > 
> > If anyone has any insight, I would really appreciate it. 
> > 
> > Thanks, 
> > 
> > Brad 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> > Groups "Android Developers" group. 
> > To post to this group, send email to [email protected] 
> > To unsubscribe from this group, send email to 
> > [email protected] 
> > For more options, visit this group at 
> > http://groups.google.com/group/android-developers?hl=en 
> > --- 
> > You received this message because you are subscribed to the Google Groups 
> > "Android Developers" group. 
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to [email protected]. 
> > For more options, visit https://groups.google.com/groups/opt_out. 
> 
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Android Developers" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to